From 4105c9b7b77c8be32b42f9f0c1e75ecf05a677f5 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期四, 29 六月 2023 18:42:22 +0800
Subject: [PATCH] Merge branch 'wulong' of http://116.62.18.175:6699/r/~yxh/smartor-web into yxh01
---
src/views/shortmessage/communication/index.vue | 908 +++++++++++
src/views/shortmessage/communication/lemon-message-voice.vue | 35
src/views/shortmessage/healthinformation/index.vue | 17
src/views/shortmessage/taglibrary/index.vue | 711 +++++++++
src/views/knowledge/questionbank/index.vue | 2
src/views/knowledge/education/index.vue | 10
src/views/shortmessage/communication/database/contacts.js | 148 +
src/views/shortmessage/communication/database/user.js | 6
src/websocket/websocket.js | 113 +
src/main.js | 166 +-
src/views/repositoryai/verbaltrick/particulars/index.vue | 6
package.json | 9
src/views/knowledge/questionnaire/index.vue | 2
src/views/repositoryai/matching/myAudio.vue | 288 +++
src/views/shortmessage/messagebank/index.vue | 932 ++++++++++++
src/views/repositoryai/matching/index.vue | 752 +++++++++
src/views/shortmessage/communication/database/emoji.js | 293 +++
src/views/shortmessage/communication/database/messages.js | 154 ++
18 files changed, 4,458 insertions(+), 94 deletions(-)
diff --git a/package.json b/package.json
index 6b33458..e068a32 100644
--- a/package.json
+++ b/package.json
@@ -52,13 +52,17 @@
"js-beautify": "1.13.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1",
+ "lemon-imui": "^1.7.7",
"nprogress": "0.2.0",
"quill": "1.3.7",
"quill-image-drop-module": "^1.0.3",
"quill-image-resize": "^3.0.9",
"quill-image-resize-module": "^3.0.0",
+ "sass": "^1.63.6",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
+ "style-loader": "^3.3.3",
+ "stylus-loader": "^7.1.3",
"vue": "2.6.12",
"vue-cli": "^2.9.6",
"vue-codemirror": "^4.0.6",
@@ -83,11 +87,12 @@
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"lint-staged": "10.5.3",
+ "node-sass": "^8.0.0",
"runjs": "4.4.2",
- "sass": "1.32.13",
- "sass-loader": "10.1.1",
+ "sass-loader": "^10.4.1",
"script-ext-html-webpack-plugin": "2.1.5",
"script-loader": "^0.7.2",
+ "stylus": "^0.59.0",
"svg-sprite-loader": "5.1.1",
"vue-template-compiler": "2.6.12"
},
diff --git a/src/main.js b/src/main.js
index 3ae7057..e21d599 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,27 +1,27 @@
-import Vue from 'vue'
+import Vue from "vue";
-import Cookies from 'js-cookie'
+import Cookies from "js-cookie";
import * as echarts from "echarts";
-import Element from 'element-ui'
-import './assets/styles/element-variables.scss'
+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'
-import store from './store'
-import router from './router'
-import directive from './directive' // directive
-import plugins from './plugins' // plugins
-import { download } from '@/utils/request'
- //寮曞叆quill-editor缂栬緫鍣�
- import VueQuillEditor from 'vue-quill-editor'
- // require styles 寮曞叆鏍峰紡
- import 'quill/dist/quill.core.css'
- import 'quill/dist/quill.snow.css'
- import 'quill/dist/quill.bubble.css'
- Vue.use(VueQuillEditor);
- // 寮曞叆
+import "@/assets/styles/index.scss"; // global css
+import "@/assets/styles/ruoyi.scss"; // ruoyi css
+import App from "./App";
+import store from "./store";
+import router from "./router";
+import directive from "./directive"; // directive
+import plugins from "./plugins"; // plugins
+import { download } from "@/utils/request";
+//寮曞叆quill-editor缂栬緫鍣�
+import VueQuillEditor from "vue-quill-editor";
+// require styles 寮曞叆鏍峰紡
+import "quill/dist/quill.core.css";
+import "quill/dist/quill.snow.css";
+import "quill/dist/quill.bubble.css";
+Vue.use(VueQuillEditor);
+// 寮曞叆
import { codemirror } from "vue-codemirror";
import "@/utils/cm-setting.js";
Vue.component("codemirror", codemirror);
@@ -29,89 +29,97 @@
// import 'vue-codemirror/dist/codemirror.css'
// Vue.use(VueCodeMirror)
- //瀹炵幇quill-editor缂栬緫鍣ㄦ嫋鎷戒笂浼犲浘鐗�
+//瀹炵幇quill-editor缂栬緫鍣ㄦ嫋鎷戒笂浼犲浘鐗�
// import Quill from 'quill'
-import {Quill} from 'vue-quill-editor'
- window.Quill = Quill;
- import imageResize from 'quill-image-resize'
-// const scriptEl = document.createElement('script');
-// scriptEl.charset = 'utf-8'
-// scriptEl.src = './image-resize.min.js'
-// const head = document.head || document.getElementsByTagName('head')[0];
+import { Quill } from "vue-quill-editor";
+window.Quill = Quill;
+import imageResize from "quill-image-resize";
+// const scriptEl = document.createElement('script');
+// scriptEl.charset = 'utf-8'
+// scriptEl.src = './image-resize.min.js'
+// const head = document.head || document.getElementsByTagName('head')[0];
// head.appendChild(scriptEl);
- import { ImageDrop } from 'quill-image-drop-module'
+import { ImageDrop } from "quill-image-drop-module";
// import imageResize from 'quill-image-resize'
- Quill.register('modules/imageDrop', ImageDrop)
+Quill.register("modules/imageDrop", ImageDrop);
// import imageResize from 'quill-image-resize-module'
- Quill.register('modules/imageResize', imageResize)
- //瀹炵幇quill-editor缂栬緫鍣ㄨ皟鏁村浘鐗囧昂瀵�
+Quill.register("modules/imageResize", imageResize);
+//瀹炵幇quill-editor缂栬緫鍣ㄨ皟鏁村浘鐗囧昂瀵�
// Quill.register('modules/imageResize', ImageResize)
-import './assets/icons' // icon
-import './permission' // permission control
+import LemonIMUI from "lemon-imui";
+import "lemon-imui/dist/index.css";
+Vue.use(LemonIMUI);
+
+import "./assets/icons"; // icon
+import "./permission"; // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/system/config";
-import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
+import {
+ parseTime,
+ resetForm,
+ addDateRange,
+ selectDictLabel,
+ selectDictLabels,
+ handleTree,
+} from "@/utils/ruoyi";
// 鍒嗛〉缁勪欢
import Pagination from "@/components/Pagination";
// 鑷畾涔夎〃鏍煎伐鍏风粍浠�
-import RightToolbar from "@/components/RightToolbar"
+import RightToolbar from "@/components/RightToolbar";
// 瀵屾枃鏈粍浠�
-import Editor from "@/components/Editor"
+import Editor from "@/components/Editor";
// 鏂囦欢涓婁紶缁勪欢
-import FileUpload from "@/components/FileUpload"
+import FileUpload from "@/components/FileUpload";
// 鍥剧墖涓婁紶缁勪欢
-import ImageUpload from "@/components/ImageUpload"
+import ImageUpload from "@/components/ImageUpload";
// 鍥剧墖棰勮缁勪欢
-import ImagePreview from "@/components/ImagePreview"
+import ImagePreview from "@/components/ImagePreview";
// 瀛楀吀鏍囩缁勪欢
-import DictTag from '@/components/DictTag'
+import DictTag from "@/components/DictTag";
// 澶撮儴鏍囩缁勪欢
-import VueMeta from 'vue-meta'
+import VueMeta from "vue-meta";
// 瀛楀吀鏁版嵁缁勪欢
-import DictData from '@/components/DictData'
+import DictData from "@/components/DictData";
// 缁勪欢灏佽闆嗘垚
-import components from './components'
+import components from "./components";
// 娉ㄥ唽杩囨护鍣�
// 鑷畾涔夋寚浠�
-import * as directives from './directives'
-import * as filters from './filters'
-for(let key in filters){
-Vue.filter(key, filters[key])
+import * as directives from "./directives";
+import * as filters from "./filters";
+for (let key in filters) {
+ Vue.filter(key, filters[key]);
}
// 鍏ㄥ眬鏂规硶鎸傝浇
-Vue.prototype.getDicts = getDicts
-Vue.prototype.getConfigKey = getConfigKey
-Vue.prototype.parseTime = parseTime
-Vue.prototype.resetForm = resetForm
-Vue.prototype.addDateRange = addDateRange
-Vue.prototype.selectDictLabel = selectDictLabel
-Vue.prototype.selectDictLabels = selectDictLabels
-Vue.prototype.download = download
-Vue.prototype.handleTree = handleTree
+Vue.prototype.getDicts = getDicts;
+Vue.prototype.getConfigKey = getConfigKey;
+Vue.prototype.parseTime = parseTime;
+Vue.prototype.resetForm = resetForm;
+Vue.prototype.addDateRange = addDateRange;
+Vue.prototype.selectDictLabel = selectDictLabel;
+Vue.prototype.selectDictLabels = selectDictLabels;
+Vue.prototype.download = download;
+Vue.prototype.handleTree = handleTree;
// 鍏ㄥ眬缁勪欢鎸傝浇
-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.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);
// 灏佽鑷畾涔夋寚浠�
-for(let key in directives)
-Vue.directive(key, directives[key])
-Vue.use(directive)
-Vue.use(plugins)
-Vue.use(VueMeta)
-DictData.install()
-Vue.use(components)
+for (let key in directives) Vue.directive(key, directives[key]);
+Vue.use(directive);
+Vue.use(plugins);
+Vue.use(VueMeta);
+DictData.install();
+Vue.use(components);
// Vue.use(VueQuillEditor)
-
/**
* If you don't want to use mock-server
@@ -123,14 +131,14 @@
*/
Vue.use(Element, {
- size: Cookies.get('size') || 'medium' // set element-ui default size
-})
+ size: Cookies.get("size") || "medium", // set element-ui default size
+});
-Vue.config.productionTip = false
+Vue.config.productionTip = false;
new Vue({
- el: '#app',
+ el: "#app",
router,
store,
- render: h => h(App)
-})
+ render: (h) => h(App),
+});
diff --git a/src/views/knowledge/education/index.vue b/src/views/knowledge/education/index.vue
index c29eb8a..6623dde 100644
--- a/src/views/knowledge/education/index.vue
+++ b/src/views/knowledge/education/index.vue
@@ -137,7 +137,7 @@
>
</el-form-item>
</el-form>
-
+ <el-divider></el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
@@ -430,13 +430,7 @@
</template>
<script>
-import {
- listUser,
- getUser,
- delUser,
- addUser,
- updateUser,
-} from "@/api/system/user";
+import { listUser, delUser, addUser, updateUser } from "@/api/system/user";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
diff --git a/src/views/knowledge/questionbank/index.vue b/src/views/knowledge/questionbank/index.vue
index 51b92df..c80f732 100644
--- a/src/views/knowledge/questionbank/index.vue
+++ b/src/views/knowledge/questionbank/index.vue
@@ -53,7 +53,7 @@
>
</el-form-item>
</el-form>
-
+ <el-divider></el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
diff --git a/src/views/knowledge/questionnaire/index.vue b/src/views/knowledge/questionnaire/index.vue
index 9290e98..6f34dca 100644
--- a/src/views/knowledge/questionnaire/index.vue
+++ b/src/views/knowledge/questionnaire/index.vue
@@ -109,7 +109,7 @@
>
</el-form-item>
</el-form>
-
+ <el-divider></el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
diff --git a/src/views/repositoryai/matching/index.vue b/src/views/repositoryai/matching/index.vue
new file mode 100644
index 0000000..bd334f3
--- /dev/null
+++ b/src/views/repositoryai/matching/index.vue
@@ -0,0 +1,752 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+ <el-col :span="24" :xs="24">
+ <el-form
+ :model="topqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="棰樼洰鏂囨湰" prop="text">
+ <el-input
+ v-model="topqueryParams.text"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鍏宠仈鎸囨爣" prop="relevance">
+ <el-input
+ v-model="topqueryParams.relevance"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ /> </el-form-item
+ ><el-form-item label="鎵嬫満鍙�" prop="phonenumber">
+ <el-input
+ v-model="topqueryParams.phonenumber"
+ placeholder="璇疯緭鍏ユ墜鏈哄彿"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <br />
+ <el-form-item label="鍒涘缓鏃堕棿">
+ <el-date-picker
+ v-model="dateRange"
+ style="width: 240px"
+ value-format="yyyy-MM-dd"
+ type="daterange"
+ range-separator="-"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ ></el-date-picker>
+ </el-form-item>
+
+ <el-form-item>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="medium"
+ @click="handleQuery"
+ >鎼滅储</el-button
+ >
+ <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
+ >閲嶇疆</el-button
+ >
+ </el-form-item>
+ </el-form>
+ <el-divider></el-divider>
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="medium"
+ @click="handleAdd"
+ v-hasPermi="['system:user:add']"
+ >鏂板</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="medium"
+ :disabled="single"
+ @click="handleUpdate"
+ v-hasPermi="['system:user:edit']"
+ >淇敼</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ size="medium"
+ :disabled="multiple"
+ @click="handleDelete"
+ v-hasPermi="['system:user:remove']"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+ <el-col :span="19">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="medium"
+ @click="handleExport"
+ v-hasPermi="['system:user:export']"
+ >瀵煎嚭</el-button
+ >
+ </div>
+ </div>
+ </el-col>
+ <!-- <el-col :span="1.5"> </el-col> -->
+ </el-row>
+ <!-- <right-toolbar
+ :showSearch.sync="showSearch"
+ @queryTable="getList"
+ :columns="columns"
+ ></right-toolbar> -->
+ <el-table
+ v-loading="loading"
+ :data="userList"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column
+ label="搴忓彿"
+ align="center"
+ key="userId"
+ prop="userId"
+ />
+
+ <el-table-column
+ label="濮撳悕"
+ align="center"
+ key="userName"
+ prop="userName"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="鎵嬫満鍙�"
+ align="center"
+ key="phonenumber"
+ prop="phonenumber"
+ />
+ <el-table-column
+ label="妯$増鍚嶇О"
+ align="center"
+ key="templateName"
+ prop="templateName"
+ />
+ <el-table-column
+ label="闂鏂囨湰"
+ align="center"
+ key="problem"
+ prop="problem"
+ width="180"
+ />
+ <el-table-column
+ label="闂鍥炲"
+ align="center"
+ key="replyz"
+ prop="replyz"
+ />
+
+ <el-table-column
+ label="鎾斁璇煶"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="350"
+ >
+ <template slot-scope="scope">
+ <my-audio
+ :theUrl="scope.row.url"
+ :theControlList="scope.row.controlList"
+ ></my-audio>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鍖归厤鎴愬姛璇彞"
+ align="center"
+ key="replya"
+ prop="replya"
+ />
+ <el-table-column
+ label="鍏宠仈鎸囨爣"
+ align="center"
+ key="replys"
+ prop="replys"
+ />
+ <el-table-column
+ label="鎸囨爣鍊�"
+ align="center"
+ key="replyc"
+ prop="replyc"
+ />
+ <el-table-column
+ label="鍥炲鏃堕棿"
+ align="center"
+ prop="createTime"
+ width="160"
+ >
+ <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.createTime) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="180"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ icon="el-icon-edit"
+ class="icon-edit"
+ @click="Referencequestion(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ >缂栬緫璇濇湳</el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ icon="el-icon-s-claim"
+ class="icon-s-claim"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ >娴嬭瘯鍖归厤</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="topqueryParams.pageNum"
+ :limit.sync="topqueryParams.pageSize"
+ @pagination="getList"
+ />
+ </el-col>
+ </el-row>
+
+ <!-- 娣诲姞鎴栦慨鏀归鐩厤缃璇濇 -->
+ <!-- 鎸囨爣缂栬緫 -->
+ <el-dialog :visible.sync="indicatorVisible" width="700px">
+ <div class="headline">
+ <div class="basics">闂閰嶇疆</div>
+ <div class="headbottom">
+ <el-button
+ type="primary"
+ icon="el-icon-circle-plus-outline"
+ @click="addzbiao"
+ >娣诲姞鎸囨爣</el-button
+ >
+ <el-button type="primary" icon="el-icon-s-claim">淇濆瓨</el-button>
+ <el-button type="primary" icon="el-icon-document"
+ >鏇存柊鎸囨爣瑙勫垯鑷虫ā鐗�</el-button
+ >
+ </div>
+ </div>
+ <div class="valuetop" v-for="(item, index) in deployList" :key="item.id">
+ <div class="val-text">
+ <div>
+ 鏈夋棤澶嶆煡 <span>{{ item.name }}</span>
+ </div>
+ <div class="text-icon" @click="deletei(index)">
+ <i class="el-icon-delete" />
+ </div>
+ </div>
+ <div class="val-bon">
+ <el-form ref="form" :model="form" label-width="80px">
+ <el-form-item label="鎸囨爣绫诲瀷">
+ <el-radio-group v-model="form.resource">
+ <el-radio label="閫夐」"></el-radio>
+ <el-radio label="鏂囨湰"></el-radio>
+ <el-radio label="鏁扮粍"></el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鎸囨爣鍚嶇О">
+ <el-input v-model="form.name"></el-input>
+ </el-form-item>
+ <el-form-item label="鎸囨爣鍊�">
+ <el-input v-model="item.name"></el-input>
+ </el-form-item>
+ <el-form-item label="鐗规畩璧勬簮">
+ <el-radio-group v-model="form.resource">
+ <el-radio label="鍩虹"></el-radio>
+ <el-radio label="鑷畾涔�"></el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鍩虹瑙勫垯">
+ <el-input type="textarea" v-model="item.valuetop"></el-input>
+ </el-form-item>
+ </el-form>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="indicatorVisible = false">鍏抽棴</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ listUser,
+ delUser,
+ addUser,
+ updateUser,
+ changeUserStatus,
+} from "@/api/system/user";
+
+import myAudio from "./myAudio.vue";
+export default {
+ name: "User",
+ dicts: ["sys_normal_disable", "sys_user_sex"],
+ components: { myAudio },
+ data() {
+ return {
+ // 閬僵灞�
+ loading: true,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ // 鎬绘潯鏁�
+ total: 0,
+ // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+ userList: [
+ {
+ userId: 1,
+ userName: "鐜嬩簲",
+ phonenumber: "13802963330",
+ templateName: "涔屾媺",
+ problem: "鏈�杩戞�庝箞鏍�",
+ reply: "sas",
+ url: "",
+ controlList: "onlyOnePlaying",
+ },
+ {
+ userId: 1,
+ userName: "寮犱簲",
+ phonenumber: "13802963330",
+ templateName: "涔屾媺",
+ problem: "鏈�杩戞�庝箞鏍�",
+ reply: "sas",
+ url: "",
+ controlList: "onlyOnePlaying",
+ },
+ ],
+ deployList: [
+ {
+ id: 1,
+ name: "鏈�",
+ valuetop:
+ "(?!.*蹇榺.*涓峾.*娌�)^.*(鏄瘄鏈墊瀵箌鍋殀浣渱妫�|鏌澶嶈瘖|濂絴鍙傚姞|澶嶈瘖|鍘�(杩噟濂絴浜唡瀹寍鍖婚櫌)|鏉�(杩噟浜唡鍖婚櫌))|娌¢敊|瀵瑰憖|鍙兘|(宸茬粡|鏃�)鍘讳簡|寮�浜嗚嵂|鑵板甫|鍚婂甫|瑕佺殑|(?<!娌�)鏈夌殑|琛ㄥ甫,10;瑕�,5",
+ },
+ {
+ id: 2,
+ name: "涓嶇煡閬�",
+ valuetop:
+ "(涓峾娌璋亅楝紎鎬庝箞).*(鐥厊鍙兘|鐭ラ亾|浜嗚В|娓呮|鎳倈鏄庣櫧|纭|纭畾|鏅撳緱|鐭ユ檽|璁ゅ緱|璇嗗緱|鍗拌薄|鐔熸倝|璁皘浼殀鍏冲績|鍏虫敞|娉ㄦ剰|鍛婅瘔|閫氱煡|鍚�)",
+ },
+ ],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+
+ inputValue: "",
+ indicatorVisible: false, //鎸囨爣缂栬緫寮规
+ radio: "",
+ radios: [],
+ previewtype: 2, //棰勮棰樼洰绫诲瀷
+ total: 0, // 鎬绘潯鏁�
+ ImportQuantity: 999, //瀵奸鐩暟閲�
+ //棰勮棰樼洰淇℃伅
+ previewvalue: {
+ username: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ //瀵煎叆杩涘害
+ dractive: 1,
+ // 瀵煎叆灞曠ず琛ㄥ崟
+ uploadingData: {},
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+
+ // 琛ㄥ崟鏍¢獙
+ rules: {
+ userName: [
+ { required: true, message: "鐢ㄦ埛鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
+ {
+ min: 2,
+ max: 20,
+ message: "鐢ㄦ埛鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿",
+ trigger: "blur",
+ },
+ ],
+ nickName: [
+ { required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ password: [
+ { required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
+ {
+ min: 5,
+ max: 20,
+ message: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
+ trigger: "blur",
+ },
+ ],
+ email: [
+ {
+ type: "email",
+ message: "璇疯緭鍏ユ纭殑閭鍦板潃",
+ trigger: ["blur", "change"],
+ },
+ ],
+ phonenumber: [
+ {
+ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+ message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+ trigger: "blur",
+ },
+ ],
+ IDnumber: [
+ {
+ pattern:
+ /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/,
+ message: "璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�",
+ trigger: "blur",
+ },
+ ],
+ },
+ };
+ },
+ watch: {},
+ created() {
+ this.getList();
+ },
+ methods: {
+ /** 鏌ヨ棰樼洰鍒楄〃 */
+ getList() {
+ this.loading = true;
+ listUser(this.addDateRange(this.topqueryParams, this.dateRange)).then(
+ (response) => {
+ // this.userList = response.rows;
+ this.total = response.total;
+ this.loading = false;
+ }
+ );
+ },
+ // 缂栬緫璇濇湳鎸囨爣
+ Referencequestion(row) {
+ this.indicatorVisible = true;
+ },
+ // 鏂板鎸囨爣
+ addzbiao() {
+ const ids = this.deployList.length + 1;
+ console.log(ids);
+ this.deployList.push({
+ id: ids,
+ name: "",
+ valuetop: "",
+ });
+ },
+ // 鍒犻櫎鎸囨爣
+ deletei(index) {
+ console.log(index);
+ this.deployList.splice(index, 1);
+ },
+
+ // 棰樼洰鐘舵�佷慨鏀�
+ handleStatusChange(row) {
+ let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+ this.$modal
+ .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵')
+ .then(function () {
+ return changeUserStatus(row.userId, row.status);
+ })
+ .then(() => {
+ this.$modal.msgSuccess(text + "鎴愬姛");
+ })
+ .catch(function () {
+ row.status = row.status === "0" ? "1" : "0";
+ });
+ },
+ // 鍙栨秷鎸夐挳
+ cancel() {
+ this.reset();
+ },
+ // 琛ㄥ崟閲嶇疆
+ reset() {
+ this.form = {
+ userId: undefined,
+ deptId: undefined,
+ userName: undefined,
+ nickName: undefined,
+ password: undefined,
+ phonenumber: undefined,
+ email: undefined,
+ sex: undefined,
+ status: "0",
+ remark: undefined,
+ postIds: [],
+ roleIds: [],
+ };
+ this.resetForm("form");
+ },
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ handleQuery() {
+ this.topqueryParams.pageNum = 1;
+ this.getList();
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.resetForm("queryForm");
+ this.topqueryParams.deptId = undefined;
+ this.$refs.tree.setCurrentKey(null);
+ this.handleQuery();
+ },
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.userId);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ },
+ //鍒犻櫎閫夐」
+ handleClose(tag) {
+ this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
+ },
+
+ /** 鏂板鎸夐挳鎿嶄綔 */
+ handleAdd() {
+ this.reset();
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ },
+
+ /** 鎻愪氦鎸夐挳 */
+ submitForm: function () {
+ this.$refs["form"].validate((valid) => {
+ if (valid) {
+ if (this.form.userId != undefined) {
+ updateUser(this.form).then((response) => {
+ this.$modal.msgSuccess("淇敼鎴愬姛");
+ this.open = false;
+ this.getList();
+ });
+ } else {
+ addUser(this.form).then((response) => {
+ this.$modal.msgSuccess("鏂板鎴愬姛");
+ this.open = false;
+ this.getList();
+ });
+ }
+ }
+ });
+ },
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+ handleDelete(row) {
+ const userIds = row.userId || this.ids;
+ this.$modal
+ .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�')
+ .then(function () {
+ return delUser(userIds);
+ })
+ .then(() => {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ })
+ .catch(() => {});
+ },
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ this.download(
+ "system/user/export",
+ {
+ ...this.topqueryParams,
+ },
+ `user_${new Date().getTime()}.xlsx`
+ );
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.el-button--primary.is-plain {
+ color: #ffffff;
+ background: #409eff;
+ border-color: #4fabe9;
+}
+.document {
+ width: 100px;
+ height: 50px;
+}
+.documentf {
+ display: flex;
+ justify-content: flex-end;
+}
+.download {
+ text-align: center;
+ .el-upload__tip {
+ font-size: 23px;
+ }
+ .el-upload__text {
+ font-size: 23px;
+ }
+}
+.uploading {
+ margin-top: 20px;
+ margin: 20px;
+ padding: 30px;
+ background: #ffffff;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+}
+.el-tag + .el-tag {
+ margin-left: 10px;
+}
+.button-new-tag {
+ margin-left: 10px;
+ height: 32px;
+ line-height: 30px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+.input-new-tag {
+ width: 90px;
+ margin-left: 10px;
+ vertical-align: bottom;
+}
+.drexamine {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 30px;
+ background: #daeaf5;
+ img {
+ width: 100px;
+ height: 100px;
+ }
+}
+.qrcode-dialo {
+ // text-align: center;
+ // display: flex;
+ margin: 20px;
+ padding: 30px;
+ background: #edf1f7;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+ .topic-dev {
+ margin-bottom: 25px;
+ font-size: 20px !important;
+ .dev-text {
+ margin-bottom: 10px;
+ }
+ }
+}
+.headline {
+ display: flex;
+ height: 50px;
+ margin: 15px;
+ margin-bottom: 0;
+ padding: 0 20px 20px 20px;
+ line-height: 50px;
+ background: #92c5f0;
+ justify-content: space-between;
+}
+.valuetop {
+ .val-text {
+ display: flex;
+ height: 50px;
+ margin: 15px;
+ margin-bottom: 0;
+ // padding: 0 20px 20px 20px;
+ padding: 0 20px;
+ align-items: center;
+ background: #92c5f0;
+ justify-content: space-between;
+ .text-icon {
+ width: 35px;
+ height: 35px;
+ line-height: 35px;
+ text-align: center;
+ background: #fafafa;
+ cursor: pointer;
+ border-radius: 5px;
+ }
+ }
+ .val-bon {
+ margin: 15px;
+ margin-top: 0;
+ padding: 30px;
+ background: #f2f5fc;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+ }
+}
+.icon-s-claim {
+ color: #409eff;
+}
+.icon-edit {
+ color: rgb(5, 212, 212);
+}
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/views/repositoryai/matching/myAudio.vue b/src/views/repositoryai/matching/myAudio.vue
new file mode 100644
index 0000000..ec471d9
--- /dev/null
+++ b/src/views/repositoryai/matching/myAudio.vue
@@ -0,0 +1,288 @@
+<template>
+ <div
+ class="di main-wrap"
+ v-loading="audio.waiting"
+ element-loading-text="闊宠棰戝姞杞戒腑"
+ element-loading-spinner="el-icon-loading"
+ >
+ <!-- 杩欓噷璁剧疆浜唕ef灞炴�у悗锛屽湪vue缁勪欢涓紝灏卞彲浠ョ敤this.$refs.audio鏉ヨ闂dom鍏冪礌 -->
+ <audio
+ ref="audio"
+ class="dn"
+ :src="url"
+ :preload="audio.preload"
+ @play="onPlay"
+ @error="onError"
+ @waiting="onWaiting"
+ @pause="onPause"
+ @timeupdate="onTimeupdate"
+ @loadedmetadata="onLoadedmetadata"
+ ></audio>
+ <div>
+ <!-- 鎾斁 -->
+ <i
+ class="el-icon-microphone"
+ v-if="audio.playing == true"
+ style="color: rgb(10 243 61); font-size: 18px"
+ ></i>
+ <i class="el-icon-microphone" v-else style="font-size: 18px"></i>
+ <el-button style="margin: 0 10px" type="text" @click="startPlayOrPause">{{
+ audio.playing | transPlayPause
+ }}</el-button>
+
+ <!-- 鎾斁鏈�澶ф椂闂� -->
+ <span type="info">{{ audio.maxTime | formatSecond }}</span>
+
+ <!-- 蹇繘鎸夐挳 -->
+ <el-button
+ v-show="!controlList.noSpeed"
+ type="text"
+ @click="changeSpeed"
+ >{{ audio.speed | transSpeed }}</el-button
+ >
+ <a
+ :href="url"
+ v-show="!controlList.noDownload"
+ target="_blank"
+ class="download"
+ download
+ >涓嬭浇</a
+ >
+ <br />
+
+ <!-- 鎾斁鏃堕棿 -->
+ <!-- <el-tag type="info">{{ audio.currentTime | formatSecond }}</el-tag> -->
+
+ <!-- 鎾斁杩涘害鏉� -->
+ <el-slider
+ v-show="!controlList.noProcess"
+ v-model="sliderTime"
+ :format-tooltip="formatProcessToolTip"
+ @change="changeCurrentTime"
+ class="slider"
+ ></el-slider>
+
+ <!-- 闈欓煶鎸夐挳 -->
+ <!-- <el-button
+ v-show="!controlList.noMuted"
+ type="text"
+ @click="startMutedOrNot"
+ >{{ audio.muted | transMutedOrNot }}</el-button
+ > -->
+
+ <!-- 闊抽噺澶у皬 -->
+ <el-slider
+ v-show="!controlList.noVolume"
+ v-model="volume"
+ :format-tooltip="formatVolumeToolTip"
+ @change="changeVolume"
+ class="slider"
+ ></el-slider>
+ </div>
+ </div>
+</template>
+
+<script>
+function realFormatSecond(second) {
+ var secondType = typeof second;
+ if (secondType === "number" || secondType === "string") {
+ second = parseInt(second);
+ var hours = Math.floor(second / 3600);
+ second = second - hours * 3600;
+ var mimute = Math.floor(second / 60);
+ second = second - mimute * 60;
+ return (
+ hours + ":" + ("0" + mimute).slice(-2) + ":" + ("0" + second).slice(-2)
+ );
+ } else {
+ return "0:00:00";
+ }
+}
+export default {
+ // 鐖朵紶瀛�
+ props: {
+ theUrl: {
+ type: String,
+ required: true,
+ },
+ theSpeeds: {
+ type: Array,
+ default() {
+ return [1, 1.5, 2];
+ },
+ },
+ theControlList: {
+ type: String,
+ default: "",
+ },
+ },
+ data() {
+ return {
+ url: this.theUrl,
+ audio: {
+ currentTime: 0,
+ maxTime: 0, // 闊抽鏃堕暱
+ playing: false, // 鏄惁鍦ㄦ挱鏀�
+ muted: false,
+ speed: 1,
+ waiting: false,
+ preload: "auto",
+ },
+ sliderTime: 0,
+ volume: 100,
+ speeds: this.theSpeeds,
+ controlList: {
+ // 涓嶆樉绀轰笅杞�
+ noDownload: false,
+ // 涓嶆樉绀洪潤闊�
+ noMuted: false,
+ // 涓嶆樉绀洪煶閲忔潯
+ noVolume: false,
+ // 涓嶆樉绀鸿繘搴︽潯
+ noProcess: false,
+ // 鍙兘鎾斁涓�涓�
+ onlyOnePlaying: false,
+ // 涓嶈蹇繘鎸夐挳
+ noSpeed: false,
+ },
+ };
+ },
+ methods: {
+ changeSpeed() {
+ let index = this.speeds.indexOf(this.audio.speed) + 1;
+ this.audio.speed = this.speeds[index % this.speeds.length];
+ this.$refs.audio.playbackRate = this.audio.speed;
+ },
+ startMutedOrNot() {
+ this.$refs.audio.muted = !this.$refs.audio.muted;
+ this.audio.muted = this.$refs.audio.muted;
+ },
+ // 闊抽噺鏉oolTip
+ formatVolumeToolTip(index) {
+ return "闊抽噺鏉�: " + index;
+ },
+ // 杩涘害鏉oolTip
+ formatProcessToolTip(index = 0) {
+ index = parseInt((this.audio.maxTime / 100) * index);
+ return "杩涘害鏉�: " + realFormatSecond(index);
+ },
+ // 闊抽噺鏀瑰彉
+ changeVolume(index = 0) {
+ this.$refs.audio.volume = index / 100;
+ this.volume = index;
+ },
+ // 鎾斁璺宠浆
+ changeCurrentTime(index) {
+ this.$refs.audio.currentTime = parseInt(
+ (index / 100) * this.audio.maxTime
+ );
+ },
+ //鏄剧ず鎾斁鎴栬�呮殏鍋�
+ startPlayOrPause() {
+ return this.audio.playing ? this.pausePlay() : this.startPlay();
+ },
+ // 寮�濮嬫挱鏀�
+ startPlay() {
+ // console.log("鎾斁");
+ this.$refs.audio.play();
+ },
+ // 鏆傚仠鎾斁
+ pausePlay() {
+ // console.log("鏆傚仠");
+ this.$refs.audio.pause();
+ },
+
+ // 闊抽鏆傚仠鏃惰Е鍙�
+ onPause() {
+ this.audio.playing = false;
+ },
+ // 闊抽閿欒鏃惰Е鍙�
+ onError() {
+ // this.audio.waiting = true;
+ },
+ // 闊抽鍑嗗鏃惰Е鍙�
+ onWaiting(res) {
+ console.log("绛夊緟", res);
+ },
+ // 闊抽鎾斁鏃惰Е鍙�
+ onPlay(res) {
+ // console.log("鎾斁", res);
+ this.audio.playing = true;
+ this.audio.loading = false;
+ if (!this.controlList.onlyOnePlaying) {
+ return;
+ }
+ let target = res.target;
+ let audios = document.getElementsByTagName("audio"); //鑾峰彇鎵�鏈夎棰戞爣绛�
+ [...audios].forEach((item) => {
+ if (item !== target) {
+ item.pause();
+ }
+ });
+ },
+ // 鎾斁鏁伴噺闄愬埗锛堝悓鏃跺彧鑳芥挱鏀句竴涓級
+ setControlList() {
+ // 娉ㄦ剰鐖剁粍浠朵紶鐨勫�兼槸鍚︽弧瓒宠姹�
+ let controlList = this.theControlList.split(" ");
+ controlList.forEach((item) => {
+ if (this.controlList[item] !== undefined) {
+ this.controlList[item] = true;
+ }
+ });
+ },
+
+ // 褰搕imeupdate浜嬩欢澶ф姣忕涓�娆★紝鐢ㄦ潵鏇存柊闊抽娴佺殑褰撳墠鎾斁鏃堕棿
+ onTimeupdate(res) {
+ this.audio.currentTime = res.target.currentTime;
+ this.sliderTime = parseInt(
+ (this.audio.currentTime / this.audio.maxTime) * 100
+ );
+ },
+
+ // 褰撳姞杞借闊虫祦鍏冩暟鎹畬鎴愬悗锛屼細瑙﹀彂璇ヤ簨浠剁殑鍥炶皟鍑芥暟
+ onLoadedmetadata(res) {
+ // console.log("鍔犺浇", res);
+ this.audio.waiting = false; // 鍙栨秷绛夊緟鐘舵��
+ this.audio.maxTime = parseInt(res.target.duration);
+ },
+ },
+ // 杩囨护灞炴��
+ filters: {
+ formatSecond(second = 0) {
+ return realFormatSecond(second);
+ },
+ transPlayPause(value) {
+ return value ? "鏆傚仠" : "鎾斁";
+ },
+ transMutedOrNot(value) {
+ return value ? "鏀鹃煶" : "闈欓煶";
+ },
+ transSpeed(value) {
+ return "蹇繘: x" + value;
+ },
+ },
+ created() {
+ this.setControlList();
+ },
+};
+</script>
+
+<style scoped>
+.slider {
+ display: inline-block;
+ width: 100px;
+ position: relative;
+ top: 14px;
+ margin-left: 15px;
+}
+.di {
+ display: inline-block;
+}
+.download {
+ color: #409eff;
+ margin-left: 15px;
+}
+.dn {
+ display: none;
+}
+</style>
diff --git a/src/views/repositoryai/verbaltrick/particulars/index.vue b/src/views/repositoryai/verbaltrick/particulars/index.vue
index f072168..a05e672 100644
--- a/src/views/repositoryai/verbaltrick/particulars/index.vue
+++ b/src/views/repositoryai/verbaltrick/particulars/index.vue
@@ -136,7 +136,7 @@
margin-bottom: 0;
padding: 0 20px 20px 20px;
line-height: 50px;
- background: #cdcdce;
+ background: #92c5f0;
}
.headline {
display: flex;
@@ -145,7 +145,7 @@
margin-bottom: 0;
padding: 0 20px 20px 20px;
line-height: 50px;
- background: #cdcdce;
+ background: #92c5f0;
justify-content: space-between;
}
.valuetop {
@@ -157,7 +157,7 @@
// padding: 0 20px 20px 20px;
padding: 0 20px;
align-items: center;
- background: #cdcdce;
+ background: #92c5f0;
justify-content: space-between;
.text-icon {
width: 35px;
diff --git a/src/views/shortmessage/communication/database/contacts.js b/src/views/shortmessage/communication/database/contacts.js
new file mode 100644
index 0000000..6a4db60
--- /dev/null
+++ b/src/views/shortmessage/communication/database/contacts.js
@@ -0,0 +1,148 @@
+export default [
+ {
+ id: 1,
+ displayName: "鍍忔ⅵ涓�鏍疯嚜鐢�",
+ avatar: "https://p.qqan.com/up/2020-2/2020022821001845128.jpg",
+ index: "X",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: "浣犲紑蹇冨悧"
+ },
+ {
+ id: 2,
+ displayName: "姊﹂啋鏃跺垎銆�",
+ avatar: "https://p.qqan.com/up/2021-1/20211301122243621.jpg",
+ index: "M",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 3,
+ displayName: "鍑屼簯",
+ avatar: "https://p.qqan.com/up/2021-1/2021129102387841.jpg",
+ index: "L",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 4,
+ displayName: "灏忛儹",
+ avatar: "https://p.qqan.com/up/2021-1/2021122135507881.jpg",
+ index: "X",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 5,
+ displayName: "鏉ㄧ帀娉�",
+ avatar: "https://p.qqan.com/up/2021-1/20211211131598147.jpg",
+ index: "Y",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 6,
+ displayName: "妫郴Style",
+ avatar: "https://p.qqan.com/up/2021-1/2021113104111220.jpg",
+ index: "S",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 7,
+ displayName: "闇哥帇鑺�",
+ avatar: "https://p.qqan.com/up/2021-1/20211411391666.jpg",
+ index: "B",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: "浣犳�庝箞杩樹笉鐫″憖锛�"
+ },
+ {
+ id: 8,
+ displayName: "鏇惧钩",
+ avatar: "https://p.qqan.com/up/2020-12/202012291044425822.jpg",
+ index: "Z",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 9,
+ displayName: "娣$劧",
+ avatar: "https://p.qqan.com/up/2020-12/202012141813343503.jpg",
+ index: "D",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 10,
+ displayName: "鍙跺瓙銆�",
+ avatar: "https://p.qqan.com/up/2021-1/20211301122243621.jpg",
+ index: "Y",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 11,
+ displayName: "鍦熻眴",
+ avatar: "https://p.qqan.com/up/2020-12/202012111157268739.jpg",
+ index: "T",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 12,
+ displayName: "娓呮搏",
+ avatar: "https://p.qqan.com/up/2020-12/202012415467996.jpg",
+ index: "Q",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ },
+ {
+ id: 13,
+ displayName: "Lemon-imui浜ゆ祦缇�",
+ avatar: "https://p.qqan.com/up/2020-11/20201127157109035.jpg",
+ index: "L",
+ isGroup: true,
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: "杩欎釜鍜嬪鐞嗗晩锛�"
+ },
+ {
+ id: 14,
+ displayName: "绯荤粺閫氱煡",
+ avatar: "https://p.qqan.com/up/2020-6/2020061117234279854.jpg",
+ index: "[1]绯荤当閫氱煡",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: "瀹侀潤鑷磋繙閫氳繃浜嗕綘鐨勫ソ鍙嬭姹�",
+ renderContainer() {
+ return (
+ <div style="padding:15px;">
+ <div>瀹侀潤鑷磋繙閫氳繃浜嗕綘鐨勫ソ鍙嬭姹�</div>
+ <div>瀹侀潤鑷磋繙閫氳繃浜嗕綘鐨勫ソ鍙嬭姹�</div>
+ <div>瀹侀潤鑷磋繙閫氳繃浜嗕綘鐨勫ソ鍙嬭姹�</div>
+ </div>
+ );
+ }
+ },
+ {
+ id: 15,
+ displayName: "瀹侀潤鑷磋繙銆�",
+ avatar: "https://p.qqan.com/up/2020-6/2020060308522797777.jpg",
+ index: "N",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: ""
+ }
+ ];
+
\ No newline at end of file
diff --git a/src/views/shortmessage/communication/database/emoji.js b/src/views/shortmessage/communication/database/emoji.js
new file mode 100644
index 0000000..5872aac
--- /dev/null
+++ b/src/views/shortmessage/communication/database/emoji.js
@@ -0,0 +1,293 @@
+export default [
+ {
+ label: "琛ㄦ儏",
+ children: [
+ {
+ name: "1f600",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f600.png"
+ },
+ {
+ name: "1f62c",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f62c.png"
+ },
+ {
+ name: "1f601",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f601.png"
+ },
+ {
+ name: "1f602",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f602.png"
+ },
+ {
+ name: "1f923",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f923.png"
+ },
+ {
+ name: "1f973",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f973.png"
+ },
+ {
+ name: "1f603",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f603.png"
+ },
+ {
+ name: "1f604",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f604.png"
+ },
+ {
+ name: "1f605",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f605.png"
+ },
+ {
+ name: "1f606",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f606.png"
+ },
+ {
+ name: "1f607",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f607.png"
+ },
+ {
+ name: "1f609",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f609.png"
+ },
+ {
+ name: "1f60a",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f60a.png"
+ },
+ {
+ name: "1f642",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f642.png"
+ },
+ {
+ name: "1f643",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f643.png"
+ },
+ {
+ name: "1263a",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/263a.png"
+ },
+ {
+ name: "1f60b",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f60b.png"
+ },
+ {
+ name: "1f60c",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f60c.png"
+ },
+ {
+ name: "1f60d",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f60d.png"
+ },
+ {
+ name: "1f970",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f970.png"
+ },
+ {
+ name: "1f618",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f618.png"
+ },
+ {
+ name: "1f617",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f617.png"
+ },
+ {
+ name: "1f619",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f619.png"
+ },
+ {
+ name: "1f61a",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f61a.png"
+ },
+ {
+ name: "1f61c",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f61c.png"
+ },
+ {
+ name: "1f92a",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f92a.png"
+ },
+ {
+ name: "1f928",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f928.png"
+ },
+ {
+ name: "1f9d0",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f9d0.png"
+ },
+ {
+ name: "1f61d",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f61d.png"
+ },
+ {
+ name: "1f61b",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f61b.png"
+ },
+ {
+ name: "1f911",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f911.png"
+ },
+ {
+ name: "1f913",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f913.png"
+ },
+ {
+ name: "1f60e",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f60e.png"
+ },
+ {
+ name: "1f929",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f929.png"
+ },
+ {
+ name: "1f921",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f921.png"
+ },
+ {
+ name: "1f920",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f920.png"
+ },
+ {
+ name: "1f917",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f917.png"
+ },
+ {
+ name: "1f60f",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f60f.png"
+ },
+ {
+ name: "1f636",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f636.png"
+ },
+ {
+ name: "1f610",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f610.png"
+ },
+ {
+ name: "1f611",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f611.png"
+ },
+ {
+ name: "1f612",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f612.png"
+ },
+ {
+ name: "1f644",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f644.png"
+ },
+ {
+ name: "1f914",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f914.png"
+ },
+ {
+ name: "1f925",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f925.png"
+ },
+ {
+ name: "1f92d",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f92d.png"
+ },
+ {
+ name: "1f92b",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f92b.png"
+ },
+ {
+ name: "1f92c",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f92c.png"
+ },
+ {
+ name: "1f92f",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f92f.png"
+ },
+ {
+ name: "1f633",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f633.png"
+ },
+ {
+ name: "1f61e",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f61e.png"
+ },
+ {
+ name: "1f61f",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f61f.png"
+ },
+ {
+ name: "1f620",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f620.png"
+ },
+ {
+ name: "1f621",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f621.png"
+ }
+ ]
+ },
+ {
+ label: "鏀惰棌",
+ children: [
+ {
+ name: "1f62c",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f62c.png"
+ },
+ {
+ name: "1f621",
+ title: "寰瑧",
+ src: "https://twemoji.maxcdn.com/2/72x72/1f621.png"
+ }
+ ]
+ }
+ ];
+
\ No newline at end of file
diff --git a/src/views/shortmessage/communication/database/messages.js b/src/views/shortmessage/communication/database/messages.js
new file mode 100644
index 0000000..e83f1e9
--- /dev/null
+++ b/src/views/shortmessage/communication/database/messages.js
@@ -0,0 +1,154 @@
+import ContactsData from "./contacts";
+import UserData from "./user";
+const generateRandId = () => {
+ return Math.random().toString(36).substr(-8);
+};
+const getContact = (id) => {
+ const data = ContactsData.find((contact) => contact.id == id);
+ return { id: data.id, avatar: data.avatar, displayName: data.displayName };
+};
+export default {
+ 1: [
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "闂綘浠朵簨",
+ toContactId: 1,
+ fromUser: UserData
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "鍟ュ瓙銆�",
+ toContactId: 1,
+ fromUser: getContact(1)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "涓轰粈涔�",
+ toContactId: 1,
+ fromUser: UserData
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "浣犵┛浜嗛珮璺熼瀷杩樿繖涔堢煯",
+ toContactId: 1,
+ fromUser: UserData
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "鍥犱负鎴戠煯鍟娿�俒!1f600][!1f600][!1f600]",
+ toContactId: 1,
+ fromUser: getContact(1)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "浣犲紑蹇冨悧",
+ toContactId: 1,
+ fromUser: getContact(1)
+ }
+ ],
+ 2: [],
+ 3: [],
+ 4: [],
+ 5: [],
+ 6: [],
+ 7: [],
+ 8: [],
+ 9: [],
+ 10: [],
+ 11: [],
+ 12: [],
+ 13: [
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "鎴戞槸娴嬭瘯鏃跺�欑湅鍒扮殑",
+ toContactId: 1,
+ fromUser: getContact(4)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "涓婃柊鐗堟湰浜嗭紝鐜╃帺",
+ toContactId: 1,
+ fromUser: getContact(4)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "椤圭洰鍐呮病鏈夋悶杩欎釜",
+ toContactId: 1,
+ fromUser: getContact(4)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "@awesome 鏈�鏂扮殑锛屼笉鐒跺摢鏈夎繖鍔熻兘",
+ toContactId: 1,
+ fromUser: getContact(5)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "鍏跺疄鏄窡浣犵殑閬僵灞傛湁鍐茬獊",
+ toContactId: 1,
+ fromUser: getContact(4)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "鑷繁淇敼index鍝�",
+ toContactId: 1,
+ fromUser: UserData
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "浣犱滑鍗囩骇鍒版渶杩戠増浜嗗悧锛�",
+ toContactId: 1,
+ fromUser: getContact(6)
+ },
+ {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "wo 鐜板湪鐢ㄧ殑142",
+ toContactId: 1,
+ fromUser: getContact(7)
+ }
+ ],
+ 14: [],
+ 15: []
+};
diff --git a/src/views/shortmessage/communication/database/user.js b/src/views/shortmessage/communication/database/user.js
new file mode 100644
index 0000000..8870541
--- /dev/null
+++ b/src/views/shortmessage/communication/database/user.js
@@ -0,0 +1,6 @@
+export default {
+ id: 1000,
+ avatar: "https://p.qqan.com/up/2018-4/15244505348390471.jpg",
+ displayName: "閲庣伀銆�"
+ };
+
\ No newline at end of file
diff --git a/src/views/shortmessage/communication/index.vue b/src/views/shortmessage/communication/index.vue
new file mode 100644
index 0000000..34e458f
--- /dev/null
+++ b/src/views/shortmessage/communication/index.vue
@@ -0,0 +1,908 @@
+<template>
+ <div id="app">
+ <div class="scroll-top" @click="scrollToTop">馃殌</div>
+
+ <div class="imui-center">
+ <lemon-imui
+ :user="user"
+ ref="IMUI"
+ :contextmenu="contextmenu"
+ :contact-contextmenu="contactContextmenu"
+ :theme="theme"
+ :hide-menu="hideMenu"
+ :hide-menu-avatar="hideMenuAvatar"
+ :hide-message-name="hideMessageName"
+ :hide-message-time="hideMessageTime"
+ @change-menu="handleChangeMenu"
+ @change-contact="handleChangeContact"
+ @pull-messages="handlePullMessages"
+ @message-click="handleMessageClick"
+ @menu-avatar-click="handleMenuAvatarClick"
+ @send="handleSend"
+ >
+ <template #cover>
+ <div class="cover">
+ <i class="lemon-icon-message"></i>
+ <p><b>鑷畾涔夊皝闈� Lemon</b> IMUI</p>
+ </div>
+ </template>
+ <template #message-title="contact">
+ <span>{{ contact.displayName }}</span>
+ <small class="more" @click="changeDrawer(contact, $refs.IMUI)"
+ >{{
+ ($refs.IMUI ? $refs.IMUI.drawerVisible : false) ? "鍏抽棴" : "鎵撳紑"
+ }}鎶藉眽</small
+ >
+ <br />
+ </template>
+ </lemon-imui>
+ <div class="action">
+ <lemon-button @click="appendMessage">鍙戦�佹秷鎭�</lemon-button>
+ <lemon-button @click="appendEventMessage">鍙戦�� event 娑堟伅</lemon-button>
+ <lemon-button @click="removeMessage">鍒犻櫎鏈�杩戜竴鏉℃秷鎭�</lemon-button>
+ <lemon-button @click="updateMessage">淇敼娑堟伅</lemon-button>
+ <lemon-button @click="appendCustomMessage">鍙戦�佹秷鎭�</lemon-button>
+ <br />
+ <lemon-button @click="updateContact">淇敼鑱旂郴浜轰俊鎭�</lemon-button>
+ <lemon-button @click="changeMenuVisible">鍒囨崲瀵艰埅鏄剧ず</lemon-button>
+ <lemon-button @click="changeMenuAvatarVisible"
+ >鍒囨崲澶村儚鏄剧ず</lemon-button
+ >
+ <lemon-button @click="changeMessageNameVisible"
+ >鍒囨崲鑱婂ぉ绐楀彛鍐呭悕瀛楁樉绀�</lemon-button
+ >
+ <lemon-button @click="changeMessageTimeVisible"
+ >鍒囨崲鑱婂ぉ绐楀彛鍐呮椂闂存樉绀�</lemon-button
+ >
+ <lemon-button @click="changeTheme"
+ >鍒囨崲涓婚锛屽綋鍓嶄富棰橈細{{ this.theme }}</lemon-button
+ >
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import LemonMessageVoice from "./lemon-message-voice";
+import EmojiData from "./database/emoji";
+import { sendWebsocket, closeWebsocket } from "@/websocket/websocket.js";
+// Vue.component(LemonMessageVoice.name, LemonMessageVoice);
+// 鑾峰彇鏃堕棿
+const getTime = () => {
+ return new Date().getTime();
+};
+// 闅忔満id
+const generateRandId = () => {
+ return Math.random().toString(36).substr(-8);
+};
+// 闅忔満瀛楃
+const generateRandWord = () => {
+ return Math.random().toString(36).substr(2);
+};
+// 鑾峰彇娑堟伅
+const generateMessage = (toContactId = "", fromUser) => {
+ if (!fromUser) {
+ fromUser = {
+ id: "system",
+ displayName: "绯荤粺娴嬭瘯",
+ avatar: "http://upload.qqbodys.com/allimg/1710/1035512943-0.jpg",
+ };
+ }
+ return {
+ id: generateRandId(),
+ status: "succeed",
+ type: "text",
+ sendTime: getTime(),
+ content: generateRandWord(),
+ //fileSize: 1231,
+ //fileName: "asdasd.doc",
+ toContactId,
+ fromUser,
+ };
+};
+export default {
+ name: "communication",
+ data() {
+ return {
+ theme: "blue",
+ // 鑱旂郴浜哄彸閿搷浣�
+ contactContextmenu: [
+ {
+ text: "鍒犻櫎璇ヨ亰澶�",
+ click: (e, instance, hide) => {
+ const { IMUI, contact } = instance;
+ IMUI.updateContact({
+ id: contact.id,
+ lastContent: null,
+ });
+ if (IMUI.currentContactId == contact.id) IMUI.changeContact(null);
+ hide();
+ },
+ },
+ {
+ text: "璁剧疆澶囨敞鍜屾爣绛�",
+ },
+ {
+ text: "鎶曡瘔",
+ },
+ {
+ icon: "lemon-icon-message",
+ render: (h, instance, hide) => {
+ return (
+ <div style="display:flex;justify-content:space-between;align-items:center;width:130px">
+ <span>鍔犲叆榛戝悕鍗�</span>
+ <span>
+ <input type="checkbox" id="switch" />
+ <label id="switch-label" for="switch">
+ Toggle
+ </label>
+ </span>
+ </div>
+ );
+ },
+ },
+ {
+ click(e, instance, hide) {
+ const { IMUI, contact } = instance;
+ IMUI.removeContact(contact.id);
+ if (IMUI.currentContactId == contact.id) IMUI.changeContact(null);
+ hide();
+ },
+ color: "red",
+ text: "鍒犻櫎濂藉弸",
+ },
+ ],
+ // 娑堟伅鍙抽敭鎿嶄綔
+ contextmenu: [
+ {
+ click: (e, instance, hide) => {
+ const { IMUI, message } = instance;
+ const data = {
+ id: generateRandId(),
+ type: "event",
+ //浣跨敤 jsx 鏃� click蹇呴』浣跨敤绠ご鍑芥暟锛堜娇涓婁笅鏂囧仠鐣欏湪vue鍐咃級
+ content: (
+ <div>
+ <span>
+ 浣犳挙鍥炰簡涓�鏉℃秷鎭瘂" "}
+ <span
+ v-show={message.type == "text"}
+ style="color:#333;cursor:pointer"
+ content={message.content}
+ on-click={(e) => {
+ IMUI.setEditorValue(e.target.getAttribute("content"));
+ }}
+ >
+ 閲嶆柊缂栬緫
+ </span>
+ </span>
+ </div>
+ ),
+
+ toContactId: message.toContactId,
+ sendTime: getTime(),
+ };
+ IMUI.removeMessage(message.id);
+ IMUI.appendMessage(data, true);
+ hide();
+ },
+ visible: (instance) => {
+ return instance.message.fromUser.id == this.user.id;
+ },
+ text: "鎾ゅ洖娑堟伅",
+ },
+ {
+ visible: (instance) => {
+ return instance.message.fromUser.id != this.user.id;
+ },
+ text: "涓炬姤",
+ },
+ {
+ text: "杞彂",
+ },
+ {
+ visible: (instance) => {
+ return instance.message.type == "text";
+ },
+ text: "澶嶅埗鏂囧瓧",
+ },
+ {
+ visible: (instance) => {
+ return instance.message.type == "image";
+ },
+ text: "涓嬭浇鍥剧墖",
+ },
+ {
+ visible: (instance) => {
+ return instance.message.type == "file";
+ },
+ text: "涓嬭浇鏂囦欢",
+ },
+ {
+ click: (e, instance, hide) => {
+ const { IMUI, message } = instance;
+ IMUI.removeMessage(message.id);
+ hide();
+ },
+ icon: "lemon-icon-folder",
+ color: "red",
+ text: "鍒犻櫎",
+ },
+ ],
+ packageData: "",
+ hideMenuAvatar: false,
+ hideMenu: false,
+ hideMessageName: false,
+ hideMessageTime: true,
+ user: {
+ id: "1",
+ displayName: "June",
+ avatar: "",
+ },
+ };
+ },
+
+ created() {},
+ mounted() {
+ const contactData1 = {
+ id: "contact-1",
+ displayName: "宸ヤ綔鍗忎綔缇�",
+ avatar: "http://upload.qqbodys.com/img/weixin/20170804/ji5qxg1am5ztm.jpg",
+ index: "[1]缇ょ粍",
+ unread: 0,
+ lastSendTime: 1566047865417,
+ lastContent: "2",
+ };
+ const contactData2 = {
+ id: "contact-2",
+ displayName: "鑷畾涔夊唴瀹�",
+ avatar: "http://upload.qqbodys.com/img/weixin/20170807/jibfvfd00npin.jpg",
+ //index: "Z",
+ click(next) {
+ next();
+ },
+ renderContainer: () => {
+ return <h1 style="text-indent:20px">鑷畾涔夐〉闈�</h1>;
+ },
+ lastSendTime: 1345209465000,
+ lastContent: "12312",
+ unread: 2,
+ };
+ const contactData3 = {
+ id: "contact-3",
+ displayName: "閾佺墰",
+ avatar: "http://upload.qqbodys.com/img/weixin/20170803/jiq4nzrkrnd0e.jpg",
+ index: "T",
+ unread: 32,
+ lastSendTime: 3,
+ lastContent: "浣犲ソ123",
+ };
+ const contactData4 = {
+ id: "contact-4",
+ displayName: "濡傝姳",
+ avatar:
+ "https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4275424924,2201401076&fm=111&gp=0.jpg",
+ index: "",
+ unread: 1,
+ lastSendTime: 3,
+ lastContent: "鍚冮キ浜嗗槢",
+ };
+
+ const { IMUI } = this.$refs;
+ setTimeout(() => {
+ IMUI.changeContact("contact-1");
+ }, 500);
+
+ IMUI.setLastContentRender("event", (message) => {
+ return `[鑷畾涔夐�氱煡鍐呭]`;
+ });
+
+ let contactList = [
+ { ...contactData1 },
+ { ...contactData2 },
+ { ...contactData3 },
+ //...Array(100).fill(contactData1)
+ ];
+
+ IMUI.initContacts(contactList);
+ IMUI.initMenus([
+ {
+ name: "messages",
+ },
+ {
+ name: "contacts",
+ },
+ {
+ name: "custom1",
+ title: "鑷畾涔夋寜閽�1",
+ unread: 0,
+ render: (menu) => {
+ return <i class="lemon-icon-attah" />;
+ },
+ renderContainer: () => {
+ return (
+ <div class="article">
+ <ul>
+ <li class="article-item">
+ <h2>浜烘皯鏃ユ姤璋堢綉绾㈠甫璐э細浜у搧鐪熺殑鍊煎緱涔板悧锛�</h2>
+ </li>
+ <li class="article-item">
+ 鐢樿們澶忔渤鍘垮彂鐢�5.7绾у湴闇� 鏆傛湭鎺ュ埌浜哄憳浼や骸鎶ュ憡
+ </li>
+ <li class="article-item">
+ 鍖楁柟澶氬湴椋庡姏浠嶅己娌欏皹鐩镐即,涓滃寳鍐呰挋鍙ょ瓑鍦拌繋闆ㄩ洩
+ </li>
+ <li class="article-item">
+ 鑻辫揣杞︽锛氳秺鍗楄鏂归噰闆嗙枒姝昏�呭灞濪NA浣滄瘮瀵�
+ </li>
+ <li class="article-item">
+ 鐭ュ悕杩為攣鍜栧暋搴楃殑铔嬬硶鍚冨嚭娲昏櫕 鏇濆厜鍐呭箷澶渿鎯�
+ </li>
+ </ul>
+ <lemon-contact
+ props={{ contact: contactData1 }}
+ style="margin:20px"
+ />
+ <lemon-contact
+ props={{ contact: contactData3 }}
+ style="margin:20px"
+ />
+ </div>
+ );
+ },
+ isBottom: true,
+ },
+ {
+ name: "custom2",
+ title: "鑷畾涔夋寜閽�2",
+ unread: 0,
+ click: () => {
+ alert("鎷︽埅瀵艰埅鐐瑰嚮浜嬩欢");
+ },
+ render: (menu) => {
+ return <i class="lemon-icon-group" />;
+ },
+ isBottom: true,
+ },
+ ]);
+
+ IMUI.initEditorTools([
+ {
+ name: "emoji",
+ },
+ {
+ name: "uploadFile",
+ },
+ {
+ name: "uploadImage",
+ },
+ {
+ name: "test1",
+ click: () => {
+ IMUI.$refs.editor.selectFile("application/vnd.ms-excel");
+ },
+ render: () => {
+ return <span>Excel</span>;
+ },
+ },
+ {
+ name: "test1",
+ click: () => {
+ IMUI.initEditorTools([{ name: "uploadFile" }, { name: "emoji" }]);
+ },
+ render: () => {
+ return <span>閲嶅埗宸ュ叿鏍�</span>;
+ },
+ },
+ {
+ name: "test2",
+ isRight: true,
+ title: "涓婁紶 Excel",
+ click: () => {
+ alert("鐐瑰嚮浜� 路路路 ");
+ },
+ render: () => {
+ return <b>路路路</b>;
+ },
+ },
+ ]);
+ IMUI.initEmoji(EmojiData);
+
+ IMUI.setLastContentRender("voice", (message) => {
+ return <span>[璇煶]</span>;
+ });
+
+ const { SimpleIMUI } = this.$refs;
+ contactData1.id = "11";
+ SimpleIMUI.initContacts([contactData1]);
+ SimpleIMUI.initEmoji(EmojiData);
+ SimpleIMUI.changeContact(contactData1.id);
+ },
+ methods: {
+ changeTheme() {
+ this.theme = this.theme == "default" ? "blue" : "default";
+ },
+ scrollToTop() {
+ document.body.scrollIntoView();
+ },
+ // 鐐瑰嚮宸︿晶瀵艰埅澶村儚瑙﹀彂
+ handleMenuAvatarClick() {
+ console.log("Event:menu-avatar-click");
+ },
+ // 鐐瑰嚮娑堟伅瑙﹀彂
+ handleMessageClick(e, key, message, instance) {
+ console.log("鐐瑰嚮浜嗘秷鎭�", e, key, message);
+
+ if (key == "status") {
+ instance.updateMessage({
+ id: message.id,
+ status: "going",
+ content: "姝e湪閲嶆柊鍙戦�佹秷鎭�...",
+ });
+ setTimeout(() => {
+ instance.updateMessage({
+ id: message.id,
+ status: "succeed",
+ content: "鍙戦�佹垚鍔�",
+ });
+ }, 2000);
+ }
+ },
+ // 闅愯棌瀵艰埅澶村儚
+ changeMenuAvatarVisible() {
+ this.hideMenuAvatar = !this.hideMenuAvatar;
+ },
+ // 闅愯棌宸︿晶瀵艰埅
+ changeMenuVisible() {
+ this.hideMenu = !this.hideMenu;
+ },
+ // 鏄惁闅愯棌鑱婂ぉ绐楀彛鑱旂郴浜哄悕瀛�
+ changeMessageNameVisible() {
+ this.hideMessageName = !this.hideMessageName;
+ },
+ // 鏄惁闅愯棌鑱婂ぉ绐楀彛娑堟伅鏃堕棿
+ changeMessageTimeVisible() {
+ this.hideMessageTime = !this.hideMessageTime;
+ },
+ removeMessage() {
+ const { IMUI } = this.$refs;
+ const messages = IMUI.getCurrentMessages();
+ const id = messages[messages.length - 1].id;
+ if (messages.length > 0) {
+ IMUI.removeMessage(id);
+ }
+ },
+ updateMessage() {
+ const { IMUI } = this.$refs;
+ const messages = IMUI.getCurrentMessages();
+ const message = messages[messages.length - 1];
+ if (messages.length > 0) {
+ const update = {
+ id: message.id,
+ status: "succeed",
+ type: "file",
+ fileName: "琚慨鏀规垚鏂囦欢浜�.txt",
+ fileSize: "4200000",
+ };
+ if (message.type == "event") {
+ update.fromUser = this.user;
+ }
+ IMUI.updateMessage(update);
+ IMUI.messageViewToBottom();
+ }
+ },
+ appendCustomMessage() {
+ const { IMUI } = this.$refs;
+ const message = {
+ id: generateRandId(),
+ status: "succeed",
+ type: "voice",
+ sendTime: getTime(),
+ content: "璇煶娑堟伅",
+ params1: "1",
+ params2: "2",
+ toContactId: "contact-1",
+ fromUser: this.user,
+ };
+ IMUI.appendMessage(message, true);
+ },
+ appendMessage() {
+ const { IMUI } = this.$refs;
+ const contact = IMUI.currentContact;
+ const message = generateMessage("contact-3");
+ message.fromUser = {
+ ...message.fromUser,
+ ...this.user,
+ };
+ IMUI.appendMessage(message, true);
+ },
+ appendEventMessage() {
+ const { IMUI } = this.$refs;
+ const message = {
+ id: generateRandId(),
+ type: "event",
+ content: (
+ <span>
+ 閭�璇蜂綘鍔犲叆缇よ亰{" "}
+ <span
+ style="color:#333;cursor:pointer"
+ on-click={() => alert("OK")}
+ >
+ 鎺ュ彈
+ </span>
+ </span>
+ ),
+ toContactId: "contact-3",
+ sendTime: getTime(),
+ };
+ IMUI.appendMessage(message, true);
+ },
+ updateContact() {
+ this.$refs.IMUI.updateContact({
+ id: "contact-3",
+ unread: 10,
+ displayName: generateRandWord(),
+ lastSendTime: getTime(),
+ lastContent: "淇敼鏄电О涓洪殢鏈哄瓧姣�",
+ });
+ },
+ changeDrawer(contact, instance) {
+ instance.changeDrawer({
+ //width: 240,
+ //height: "90%",
+ //offsetX:0 ,
+ //offsetY: ,
+ //position: "center",
+ // inside: true,
+ // offsetX: -280,
+ // offsetY: -100,
+ render: () => {
+ return (
+ <div class="drawer-content">
+ <p>
+ <b>鑷畾涔夋娊灞�</b>
+ </p>
+ <p>{contact.displayName}</p>
+ </div>
+ );
+ },
+ });
+ },
+ // 宸︿晶鑱旂郴浜虹偣鍑昏Е鍙�
+ handleChangeContact(contact, instance) {
+ // 鍒囨崲鏃跺叧闂瓀s銆傚洜涓烘湁鍙兘ws杩炴帴鎺ユ敹鏁版嵁灏氭湭瀹屾垚锛岀敤鎴峰氨璺宠浆浜嗛〉闈�
+ this.requstWs();
+ console.log("Event:change-contact");
+ console.log(contact, instance);
+ instance.updateContact({
+ id: contact.id,
+ unread: 0,
+ });
+ instance.closeDrawer();
+ },
+ // 寤虹珛杩炴帴
+ requstWs() {
+ console.log("杩炴帴");
+ // 闃叉鐢ㄦ埛澶氭杩炵画鐐瑰嚮鍙戣捣璇锋眰锛屾墍浠ヨ鍏堝叧闂笂娆$殑ws璇锋眰銆�
+ closeWebsocket();
+ // 璺熷悗绔崗鍟嗭紝闇�瑕佷粈涔堝弬鏁版暟鎹粰鍚庡彴
+ const obj = {
+ type: "text",
+ content: "甯濆緱鍦g浉鐩告洶搴�",
+ userId: "1", //鎺ユ敹鏁版嵁鏂�
+ };
+ // 鍙戣捣ws璇锋眰
+ sendWebsocket(
+ "ws://192.168.1.4:8080/chat?userId=2",
+ obj,
+ this.wsMessage,
+ this.wsError
+ );
+ },
+ // 鎺ユ敹ws杩斿洖鐨勬暟鎹�
+ wsMessage(data) {
+ const dataJson = data;
+ console.log(dataJson);
+ const datas = {
+ id: "鍞竴娑堟伅ID",
+ status: "succeed",
+ type: "text",
+ sendTime: 1566047865417,
+ content: "椹笂灏卞鎺ュ畬浜嗭紒",
+ toContactId: 2,
+ fromUser: {
+ //濡傛灉 id == this.user.id娑堟伅浼氭樉绀哄湪鍙充晶锛屽惁鍒欏湪宸︿晶
+ id: 2,
+ displayName: "涓藉畨濞�",
+ avatar: "",
+ },
+ };
+ // IMUI.appendMessage(data);
+ },
+ //ws閿欒鍥炶皟
+ wsError(data) {
+ console.log(data);
+ },
+ // 鍙戦�佹柊娑堟伅瑙﹀彂
+ handleSend(message, next, file) {
+ console.log(message, file);
+ console.log(next);
+ this.requstWs();
+ setTimeout(() => {
+ next();
+ }, 1000);
+ },
+ // 鑾峰彇鑱旂郴浜轰俊鎭垨婊氬姩鍒伴《閮ㄨЕ鍙�
+ handlePullMessages(contact, next, instance) {
+ console.log(contact, "鑾峰彇鑱旂郴浜轰俊鎭疉");
+ console.log(instance, "鑾峰彇鑱旂郴浜轰俊鎭疊");
+ console.log(next, "鑾峰彇鑱旂郴浜轰俊鎭疌");
+ const otheruser = {
+ id: contact.id,
+ displayName: contact.displayName,
+ avatar: contact.avatar,
+ };
+ setTimeout(() => {
+ const messages = [
+ generateMessage(instance.currentContactId, this.user),
+ generateMessage(instance.currentContactId, otheruser),
+ generateMessage(instance.currentContactId, this.user),
+ generateMessage(instance.currentContactId, otheruser),
+ generateMessage(instance.currentContactId, this.user),
+ generateMessage(instance.currentContactId, this.user),
+ generateMessage(instance.currentContactId, otheruser),
+ {
+ ...generateMessage(instance.currentContactId, this.user),
+ ...{ status: "failed" },
+ },
+ ];
+ let isEnd = false;
+ if (
+ instance.getMessages(instance.currentContactId).length +
+ messages.length >
+ 11
+ )
+ isEnd = true;
+ next(messages, isEnd);
+ }, 500);
+ },
+ // 宸︿晶瀵艰埅鍗″垏鎹㈡椂闂�
+ handleChangeMenu() {
+ console.log("Event:change-menu");
+ },
+ openCustomContainer() {},
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+scss ::selection {
+ background: #000;
+ color: #fff;
+}
+body {
+ font-family: "Microsoft YaHei";
+ background: #f6f6f6 !important;
+}
+#app {
+ width: 90%;
+ margin: 0 auto;
+ padding-bottom: 100px;
+ .scroll-top {
+ cursor: pointer;
+ position: fixed;
+ bottom: 40px;
+ left: 50%;
+ border-radius: 50%;
+ background: #fff;
+ font-size: 18px;
+ overflow: hidden;
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ user-select: none;
+ text-align: center;
+ transform: rotate(-45deg) translateX(-50%);
+ box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
+ &:hover {
+ font-size: 22px;
+ }
+ }
+ a {
+ color: #0c5ed9;
+ text-decoration: none;
+ font-size: 12px;
+ }
+ .action {
+ margin-top: 20px;
+ .lemon-button {
+ margin-right: 10px;
+ margin-bottom: 10px;
+ }
+ }
+ .link {
+ font-size: 14px;
+ margin-top: 15px;
+ a {
+ display: inline-block;
+ margin: 0 5px;
+ text-decoration: none;
+ background: #ffba00;
+ border-radius: 4px;
+ padding: 5px 10px;
+ color: rgba(0, 0, 0, 0.8);
+ }
+ }
+ .logo {
+ position: relative;
+ display: inline-block;
+ margin: 60px auto;
+ user-select: none;
+ .logo-text {
+ font-size: 38px;
+ }
+ .logo-sub {
+ font-size: 18px;
+ color: #999;
+ font-weight: 300;
+ }
+ .logo-badge {
+ position: absolute;
+ top: -10px;
+ left: 230px;
+ background: #000;
+ border-radius: 16px;
+ color: #f9f9f9;
+ font-size: 12px;
+ padding: 4px 8px;
+ }
+ }
+ .title {
+ font-size: 24px;
+ line-height: 26px;
+ border-left: 1px solid #ffba00;
+ padding-left: 15px;
+ margin-bottom: 15px;
+ margin-top: 30px;
+ user-select: none;
+ }
+ .table {
+ width: 100%;
+ border-radius: 10px;
+ background: #fff;
+ border-collapse: collapse;
+ tr {
+ cursor: pointer;
+ }
+ tr:not(.table-head):hover {
+ background: #ffba00 !important;
+ }
+ tr:nth-of-type(even) {
+ background: #f9f9f9;
+ }
+ th {
+ user-select: none;
+ color: #999;
+ }
+ td,
+ th {
+ text-align: left;
+ padding: 10px 15px;
+ font-size: 14px;
+ font-weight: normal;
+ }
+ }
+ .imui-center {
+ margin-bottom: 60px;
+ .lemon-wrapper {
+ border: 1px solid #ddd;
+ }
+ .lemon-drawer {
+ border: 1px solid #ddd;
+ border-left: 0;
+ }
+ }
+ .drawer-content {
+ padding: 15px;
+ }
+ .more {
+ font-size: 12px;
+ line-height: 24px;
+ height: 24px;
+ position: absolute;
+ top: 14px;
+ right: 14px;
+ cursor: pointer;
+ user-select: none;
+ color: #f1f1f1;
+ display: inline-block;
+ border-radius: 4px;
+ background: #111;
+ padding: 0 8px;
+ &:active {
+ background: #999;
+ }
+ }
+ .bar {
+ text-align: center;
+ line-height: 30px;
+ background: #fff;
+ margin: 15px;
+ color: #666;
+ user-select: none;
+ font-size: 12px;
+ }
+ .cover {
+ text-align: center;
+ user-select: none;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ i {
+ font-size: 84px;
+ color: #e6e6e6;
+ }
+ p {
+ font-size: 18px;
+ color: #ddd;
+ line-height: 50px;
+ }
+ }
+ .article-item {
+ line-height: 34px;
+ cursor: pointer;
+ &:hover {
+ text-decoration: underline;
+ color: #318efd;
+ }
+ }
+ pre {
+ background: #fff;
+ border-radius: 8px;
+ padding: 15px;
+ }
+}
+.lemon-simple .lemon-container {
+ z-index: 5;
+}
+.lemon-simple .lemon-drawer {
+ z-index: 4;
+}
+input#switch[type="checkbox"] {
+ height: 0;
+ width: 0;
+ display: none;
+}
+label#switch-label {
+ cursor: pointer;
+ text-indent: -9999px;
+ width: 34px;
+ height: 20px;
+ background: #aaa;
+ display: block;
+ border-radius: 100px;
+ position: relative;
+}
+label#switch-label:after {
+ content: "";
+ position: absolute;
+ top: 2px;
+ left: 2px;
+ width: 16px;
+ height: 16px;
+ background: #fff;
+ border-radius: 20px;
+ transition: 0.3s;
+}
+input#switch:checked + label {
+ background: #0fd547;
+}
+input#switch:checked + label:after {
+ left: calc(100% - 2px);
+ transform: translateX(-100%);
+}
+label#switch-label:active:after {
+ width: 20px;
+}
+</style>
diff --git a/src/views/shortmessage/communication/lemon-message-voice.vue b/src/views/shortmessage/communication/lemon-message-voice.vue
new file mode 100644
index 0000000..1f91e54
--- /dev/null
+++ b/src/views/shortmessage/communication/lemon-message-voice.vue
@@ -0,0 +1,35 @@
+<script>
+export default {
+ name: "lemonMessageVoice",
+ inheritAttrs: false,
+ inject: ["IMUI"],
+ render() {
+ return (
+ <lemon-message-basic
+ class="lemon-message-voice"
+ props={{ ...this.$attrs }}
+ scopedSlots={{
+ content: (props) => {
+ return <span>{props.content} 馃攬</span>;
+ },
+ }}
+ />
+ );
+ },
+};
+</script>
+<style lang="scss" scoped>
+.lemon-message.lemon-message-voice {
+ user-select: none;
+
+ .lemon-message__content {
+ border: 2px solid #000;
+ font-size: 12px;
+ cursor: pointer;
+
+ &::before {
+ display: none;
+ }
+ }
+}
+</style>
diff --git a/src/views/shortmessage/healthinformation/index.vue b/src/views/shortmessage/healthinformation/index.vue
new file mode 100644
index 0000000..65f835a
--- /dev/null
+++ b/src/views/shortmessage/healthinformation/index.vue
@@ -0,0 +1,17 @@
+<template>
+ <div></div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {};
+ },
+
+ created() {},
+
+ methods: {},
+};
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/views/shortmessage/messagebank/index.vue b/src/views/shortmessage/messagebank/index.vue
new file mode 100644
index 0000000..98fc3b7
--- /dev/null
+++ b/src/views/shortmessage/messagebank/index.vue
@@ -0,0 +1,932 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn">
+ <div class="notebuttom"><i class="el-icon-chat-dot-square" />鍙戠煭淇�</div>
+ <div class="notestate">
+ <div class="state-text">鐭俊鐘舵��</div>
+ <div class="state-line">
+ <div class="value-left">
+ <i class="el-icon-chat-dot-square" />鍏ㄩ儴
+ </div>
+ <div class="quantityq">22</div>
+ </div>
+ <div class="state-line">
+ <div class="value-left">
+ <i class="el-icon-chat-dot-square" />鍙戦�佹垚鍔�
+ </div>
+ <div class="quantitycg">22</div>
+ </div>
+ <div class="state-line">
+ <div class="value-left">
+ <i class="el-icon-chat-dot-square" />鍙戦�佸け璐�
+ </div>
+ <div class="quantitysb">22</div>
+ </div>
+ <div class="state-line">
+ <div class="value-left">
+ <i class="el-icon-chat-dot-square" />寰呭彂閫�
+ </div>
+ <div class="quantityd">22</div>
+ </div>
+ </div>
+ </div>
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="leftvlue-top">鐭俊璇︽儏</div>
+ <div class="leftvlue-bg">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+ <el-col :span="24" :xs="24">
+ <el-form
+ :model="queryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="鎵嬫満鍙�" prop="userName">
+ <el-input
+ v-model="queryParams.userName"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鍒涘缓鏃堕棿">
+ <el-date-picker
+ v-model="dateRange"
+ style="width: 240px"
+ value-format="yyyy-MM-dd"
+ type="daterange"
+ range-separator="-"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ ></el-date-picker>
+ </el-form-item>
+ <el-form-item label="鐭俊绫诲瀷" prop="status">
+ <el-select v-model="queryParams.status" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in languagelist"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎿嶄綔鐢ㄦ埛" prop="status">
+ <el-select v-model="queryParams.statusa" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in qyoptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+
+ <el-form-item>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="medium"
+ @click="handleQuery"
+ >鎼滅储</el-button
+ >
+ <el-button
+ icon="el-icon-refresh"
+ size="medium"
+ @click="resetQuery"
+ >閲嶇疆</el-button
+ >
+ </el-form-item>
+ </el-form>
+
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="medium"
+ @click="handleAdd"
+ v-hasPermi="['system:user:add']"
+ >鏂板</el-button
+ >
+ </el-col>
+
+ <el-col :span="1.5">
+ <el-button
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ size="medium"
+ :disabled="multiple"
+ @click="handleDelete"
+ v-hasPermi="['system:user:remove']"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+
+ <!-- <el-col :span="1.5"> </el-col> -->
+ </el-row>
+ <el-table
+ v-loading="loading"
+ :data="userList"
+ :border="true"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column
+ label="搴忓彿"
+ align="center"
+ key="userId"
+ prop="userId"
+ />
+ <el-table-column
+ label="涓绘棬"
+ align="center"
+ key="userName"
+ prop="userName"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="闂鏂囨湰"
+ align="center"
+ key="nickName"
+ prop="nickName"
+ width="400"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="闂璇煶"
+ align="center"
+ key="aphonenumber"
+ prop="aphonenumber"
+ width="400"
+ /><el-table-column
+ label="鍏宠仈鎸囨爣"
+ align="center"
+ key="bphonenumber"
+ prop="bphonenumber"
+ width="120"
+ />
+ <el-table-column
+ label="鎸囨爣閫夐」"
+ align="center"
+ key="bphonenumber"
+ prop="bphonenumber"
+ width="120"
+ />
+ <el-table-column
+ label="璇█"
+ align="center"
+ key="indicator"
+ prop="indicator"
+ width="120"
+ />
+ <el-table-column label="鏄惁鍚敤" align="center" key="status">
+ <template slot-scope="scope">
+ <el-switch
+ v-model="scope.row.status"
+ active-value="0"
+ inactive-value="1"
+ @change="handleStatusChange(scope.row)"
+ ></el-switch>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="200"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-textxg"
+ ><i class="el-icon-edit-outline"></i>淇敼</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="compileUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-bji"
+ ><i class="el-icon-edit"></i>缂栬緫鐭俊</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleDelete(scope.row)"
+ v-hasPermi="['system:user:remove']"
+ ><span class="button-textsc"
+ ><i class="el-icon-delete-solid"></i>鍒犻櫎</span
+ ></el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+ </el-col>
+ </el-row>
+
+ <!-- 娣诲姞鎴栦慨鏀圭煭淇¢厤缃璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="indexopen"
+ width="900px"
+ append-to-body
+ >
+ <el-form
+ ref="form"
+ :model="indexform"
+ :rules="rules"
+ label-width="100px"
+ >
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="璇█" prop="deptId">
+ <el-select
+ v-model="indexform.language"
+ placeholder="璇烽�夋嫨璇█"
+ >
+ <el-option
+ v-for="index in languagelist"
+ :key="index.value"
+ :label="index.label"
+ :value="index.value"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鐭俊涓绘棬" prop="nickName">
+ <el-input
+ v-model="indexform.nickName"
+ placeholder="璇疯緭鍏ョ煭淇′富鏃�"
+ maxlength="80"
+ />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <div
+ style="display: flex; margin-left: 100px; margin-bottom: 10px"
+ >
+ <div class="tsgname" @click="tsgnameto()">鍖婚櫌鍚嶇О</div>
+ <div class="tsgname" @click="tsgnameto()">鍖婚櫌鐢佃瘽</div>
+ <div class="tsgname" @click="tsgnameto()">鍖婚櫌濮撳悕</div>
+ <div class="tsgname" @click="tsgnameto()">闅忚濮撳悕</div>
+ <div class="tsgname" @click="tsgnameto()">闅忚鐢佃瘽</div>
+ <div class="tsgname" @click="tsgnameto()">鎬у埆</div>
+ <div class="tsgname" @click="tsgnameto()">骞撮緞</div>
+ <div class="tsgname" @click="tsgnameto()">鍦板潃</div>
+ </div>
+ </el-col></el-row
+ >
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鐭俊鏂囨湰" prop="verbaltricktext">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鐭俊璇煶" prop="verbaltrickyy">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鏃犲尮閰嶆枃鏈�" prop="matchtext">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鏃犲尮閰嶈闊�" prop="matchyy">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鏃犲0鏂囨湰" prop="silenttext">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鏃犲0璇煶" prop="silentyy">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="閫氱敤搴撴枃鏈�" prop="librarytext">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="閫氱敤搴撹闊�" prop="libraryy">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鍚笉娓呮枃鏈�" prop="vaguetext">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鍚笉娓呰闊�" prop="vagueyy">
+ <el-input v-model="indexform.userName" maxlength="30" />
+ </el-form-item> </el-col
+ ></el-row>
+
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鐭俊瑙勫垯" prop="email">
+ <el-input
+ v-model="indexform.remark"
+ type="textarea"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鏄惁鍚敤">
+ <el-radio-group v-model="indexform.qystatus">
+ <el-radio
+ v-for="item in qyoptions"
+ :key="item.value"
+ :label="item.value"
+ >{{ item.label }}</el-radio
+ >
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞">
+ <el-input
+ v-model="indexform.remark"
+ type="textarea"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+ <el-button @click="cancel">鍙� 娑�</el-button>
+ </div>
+ </el-dialog>
+ </div>
+ </div>
+ <!-- 娣诲姞绫诲埆寮规 -->
+ <el-dialog
+ :title="amendtag ? '淇敼绫诲埆' : '鏂板绫诲埆'"
+ width="30%"
+ :visible.sync="dialogFormVisible"
+ >
+ <el-form :model="classifyform">
+ <el-form-item
+ :label="amendtag ? '璇疯緭鍏ユ柊鐨勭被鍒悕绉�' : '璇疯緭鍏ョ被鍒悕绉�'"
+ >
+ <el-input
+ v-model="classifyform.categoryname"
+ autocomplete="off"
+ ></el-input>
+ </el-form-item>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="dialogFormVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitsidecolumn">纭� 瀹�</el-button>
+ </div>
+ </el-dialog>
+ <!-- 鍒犻櫎绫诲埆纭妗� -->
+ <el-dialog title="璀﹀憡" :visible.sync="deleteVisible" width="40%">
+ <div style="font-size: 20px; color: rgb(247, 76, 76)">
+ 鏄惁纭鍒犻櫎鍒嗙被锛歔<span>{{ deletefenl }}</span
+ >]?
+ </div>
+ <div style="font-size: 20px">
+ 姝ゆ搷浣滀細灏嗚绫诲埆涓嬫墍鏈夋ā鍧楄浆绉昏嚦[鏈垎绫籡锛屾槸鍚︾户缁垹闄ゆ鍒嗙被锛�
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="deleteVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="deletefenlei">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ listUser,
+ getUser,
+ delUser,
+ addUser,
+ updateUser,
+} from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+export default {
+ name: "questionnaire",
+ dicts: ["sys_normal_disable", "sys_user_sex"],
+ components: { Treeselect },
+ data() {
+ return {
+ topactiveName: "Local", //椤堕儴閫夋嫨
+ // 閬僵灞�
+ loading: false,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ // 鎬绘潯鏁�
+ total: 0,
+ namequestionnaire: "",
+ haoquestionnaire: "",
+ idds: "",
+ amendtag: false, //鏄惁淇敼绫诲埆
+ dialogFormVisible: false, //淇敼娣诲姞绫诲埆寮规
+ deleteVisible: false, //鍒嗙被鍒犻櫎寮规
+ deletefenl: "楂樿鍘�", //鍒犻櫎椤�
+ classifyform: {
+ categoryname: "",
+ }, //绫诲埆琛ㄥ崟
+ // 琛ㄦ牸鏁版嵁
+ userList: [
+ {
+ userid: 1,
+ userName: "琛�甯歌銆佸翱甯歌",
+ nickName: "璐",
+ aphonenumber: "(?!涓�.*|娌�.*|鏈�.*)^.*([璐钩鍑]|璐|璇勫|璇勫),10",
+ bphonenumber: "閫夋嫨",
+ cphonenumber: "鏅�氳瘽",
+ status: "0",
+ },
+ ],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず寮瑰嚭灞�
+ open: false,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ // 瑙掕壊閫夐」
+ roleOptions: [],
+ // 娣诲姞銆佷慨鏀瑰弬鏁�
+ indexform: {},
+ numberlb: 22,
+ numberlbs: 2,
+ sidecolumnform: {}, //娣诲姞绫诲埆琛ㄥ崟
+ dialogFormVisible: false, //娣诲姞绫诲埆寮规
+ sidecolumnval: "", //绫诲埆鎼滅储
+ indexopen: false, //寮规灞曠ず鍚�
+ propss: { multiple: true },
+ languagelist: [
+ {
+ value: 1,
+ label: "鍏ㄩ儴",
+ },
+ {
+ value: 2,
+ label: "鍑洪櫌鐥呮儏闅忚",
+ },
+ {
+ value: 3,
+ label: "璇煶闅忚鍚庣煭淇�",
+ },
+ {
+ value: 4,
+ label: "鍖荤敓闅忚鍚庣煭淇�",
+ },
+ ], //璇█鍒楄〃
+ qyoptions: [
+ {
+ value: 1,
+ label: "鍚敤",
+ },
+ {
+ value: 2,
+ label: "鍏抽棴",
+ },
+ ],
+ //绫诲埆鍒楄〃
+ editableTabs: [
+ {
+ title: "鐭俊鍒嗙被涓�",
+ number: "1",
+ },
+ {
+ title: "鐭俊鍒嗙被浜�",
+ number: "2",
+ },
+ {
+ title: "鐭俊鍒嗙被涓�",
+ number: "2",
+ },
+ {
+ title: "鐭俊鍒嗙被鍥�",
+ number: "2",
+ },
+ {
+ title: "鐭俊鍒嗙被浜�",
+ number: "2",
+ },
+ ],
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ phonenumber: undefined,
+ status: undefined,
+ deptId: undefined,
+ IDnumber: undefined,
+ },
+ // 琛ㄥ崟鏍¢獙
+ rules: {
+ userName: [
+ { required: true, message: "涓绘棬涓嶈兘涓虹┖", trigger: "blur" },
+ {
+ min: 2,
+ max: 20,
+ message: "鐢ㄦ埛鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿",
+ trigger: "blur",
+ },
+ ],
+ nickName: [
+ { required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ password: [
+ { required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
+ {
+ min: 5,
+ max: 20,
+ message: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
+ trigger: "blur",
+ },
+ ],
+ email: [
+ {
+ type: "email",
+ message: "璇疯緭鍏ユ纭殑閭鍦板潃",
+ trigger: ["blur", "change"],
+ },
+ ],
+ phonenumber: [
+ {
+ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+ message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+ trigger: "blur",
+ },
+ ],
+ IDnumber: [
+ {
+ pattern:
+ /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/,
+ message: "璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�",
+ trigger: "blur",
+ },
+ ],
+ },
+ };
+ },
+ watch: {},
+ created() {
+ this.getList();
+ },
+
+ methods: {
+ /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
+ getList() {
+ // this.loading = true;
+ listUser().then((response) => {
+ console.log(response);
+ console.log(this.userList);
+ });
+ },
+ // 娣诲姞銆佷慨鏀圭被鍒�
+ submitsidecolumn() {
+ if (this.amendtag) {
+ this.classifyform.tagcategoryid = this.idds;
+ // toamendtagcategory(this.addDateRange(this.classifyform)).then(
+ // (response) => {
+ // console.log(response);
+ // this.gitclasify();
+ // }
+ // );
+ } else {
+ // addtagcategory(this.addDateRange(this.classifyform)).then(
+ // (response) => {
+ // console.log(response);
+ // this.gitclasify();
+ // }
+ // );
+ }
+ this.classifyform = {
+ categoryname: "",
+ };
+ this.idds = "";
+ this.dialogFormVisible = false;
+ },
+ //鍒犻櫎鍒嗙被
+ deletefenlei(row) {
+ if (this.deleteVisible) {
+ // deletetagcategory(this.idds).then((response) => {
+ // console.log(response);
+ // this.gitclasify();
+ // });
+ this.deleteVisible = false;
+ this.idds = "";
+ } else {
+ this.deleteVisible = true;
+ this.idds = row.tagcategoryid;
+ this.deletefenl = row.title;
+ }
+ },
+ compileUpdate(row) {
+ this.$router.push({
+ path: "/repositoryai/verbaltrick/particulars/",
+ query: { id: "1" },
+ });
+ },
+ // 棰樼洰鐘舵�佷慨鏀�
+ handleStatusChange(row) {
+ let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+ this.$modal
+ .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵')
+ .then(function () {
+ return changeUserStatus(row.userId, row.status);
+ })
+ .then(() => {
+ this.$modal.msgSuccess(text + "鎴愬姛");
+ })
+ .catch(function () {
+ row.status = row.status === "0" ? "1" : "0";
+ });
+ },
+ //鎼滅储绫诲埆
+ sidecolumnss() {},
+ // 渚挎嵎鏍囩
+ tsgnameto() {},
+ // 鍒囨崲鍏变韩/鏈湴
+ tophandleClick() {},
+ // 鍙栨秷鎸夐挳
+ cancel() {
+ this.indexopen = false;
+ this.reset();
+ },
+
+ // 琛ㄥ崟閲嶇疆
+ reset() {
+ this.form = {
+ userId: undefined,
+ deptId: undefined,
+ userName: undefined,
+ nickName: undefined,
+ password: undefined,
+ phonenumber: undefined,
+ email: undefined,
+ sex: undefined,
+ status: "0",
+ remark: undefined,
+ postIds: [],
+ roleIds: [],
+ };
+ this.resetForm("form");
+ },
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ handleQuery() {
+ this.queryParams.pageNum = 1;
+ this.getList();
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.resetForm("queryForm");
+ this.queryParams.deptId = undefined;
+ this.$refs.tree.setCurrentKey(null);
+ this.handleQuery();
+ },
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.userId);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ },
+ /** 鏂板鎸夐挳鎿嶄綔 */
+ handleAdd() {
+ this.reset();
+ this.title = "鏂板鐭俊";
+ this.indexopen = true;
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ this.title = "淇敼鐭俊";
+ this.indexopen = true;
+ },
+ // 淇敼鍒嗙被寮规
+ popoveramend(tagcategoryid) {
+ this.idds = tagcategoryid;
+ this.amendtag = true;
+ this.dialogFormVisible = true;
+ },
+
+ /** 鏇存柊/淇敼鎻愪氦鎸夐挳 */
+ submitForm: function () {
+ this.$refs["form"].validate((valid) => {
+ if (valid) {
+ if (this.form.userId != undefined) {
+ updateUser(this.form).then((response) => {
+ this.$modal.msgSuccess("淇敼鎴愬姛");
+ this.indexopen = false;
+ this.getList();
+ });
+ } else {
+ addUser(this.form).then((response) => {
+ this.$modal.msgSuccess("鏂板鎴愬姛");
+ this.indexopen = false;
+ this.getList();
+ });
+ }
+ }
+ });
+ },
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+ handleDelete(row) {
+ const userIds = row.userId || this.ids;
+ this.$modal
+ .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�')
+ .then(function () {
+ return delUser(userIds);
+ })
+ .then(() => {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ })
+ .catch(() => {});
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.Questionnairemanagement {
+ display: flex;
+}
+.sidecolumn {
+ width: 300px;
+ min-height: 100vh;
+ text-align: center;
+ // display: flex;
+ margin-top: 20px;
+ margin: 20px;
+ padding: 30px;
+ background: #edf1f7;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+ .sidecolumn-top {
+ display: flex;
+ justify-content: space-between;
+ .top-wj {
+ font-size: 20px;
+ }
+ .top-tj {
+ font-size: 18px;
+
+ color: rgb(0, 89, 255);
+ cursor: pointer;
+ }
+ }
+ .center-ss {
+ margin-top: 30px;
+ .input-with-select {
+ height: 40px !important;
+ }
+ }
+ .bottom-fl {
+ margin-top: 30px;
+ display: center !important;
+ }
+}
+.qrcode-dialo {
+ text-align: center;
+ // display: flex;
+ margin: 20px;
+ padding: 30px;
+ background: #edf1f7;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+ .qrcode-text {
+ font-size: 20px;
+ span {
+ margin-left: 20px;
+ }
+ }
+ .qrcode-img {
+ width: 300px;
+ height: 400px;
+ }
+}
+.tsgname {
+ width: 90px;
+ margin-right: 10px;
+ text-align: center;
+ cursor: pointer;
+ height: 40px;
+ line-height: 40px;
+ background: #7799fa;
+ color: #ffff;
+ font-size: 18px;
+ border-radius: 5px;
+}
+.tsgname:hover {
+ background: #3366f5;
+}
+::v-deep.el-tabs--left,
+.el-tabs--right {
+ overflow: hidden;
+ align-items: center;
+ display: flex;
+}
+::v-deep.el-input--medium .el-input__inner {
+ height: 40px !important;
+}
+::v-deep.el-tabs--right .el-tabs__active-bar.is-right {
+ height: 40px;
+ width: 5px;
+ left: 0;
+}
+::v-deep.el-tabs--right .el-tabs__item.is-right {
+ display: block;
+ font-size: 20px;
+}
+.leftvlue {
+ // display: flex;
+ // flex: 1;
+ width: 80%;
+ margin-top: 20px;
+ // margin: 20px;
+ padding: 30px;
+ background: #ffff;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+ .mulsz {
+ font-size: 20px;
+ }
+}
+.button-text {
+ color: rgb(70, 204, 238);
+}
+.button-bji {
+ color: rgb(39, 167, 67);
+}
+.button-textxg {
+ color: rgb(35, 81, 233);
+}
+.button-textsc {
+ color: rgb(235, 23, 23);
+}
+</style>
diff --git a/src/views/shortmessage/taglibrary/index.vue b/src/views/shortmessage/taglibrary/index.vue
new file mode 100644
index 0000000..77e57b6
--- /dev/null
+++ b/src/views/shortmessage/taglibrary/index.vue
@@ -0,0 +1,711 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+ <el-col :span="24" :xs="24">
+ <el-form
+ :model="topqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="鏍囩鍚嶇О" prop="userName">
+ <el-input
+ v-model="topqueryParams.userName"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+
+ <el-form-item>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="medium"
+ @click="handleQuery"
+ >鎼滅储</el-button
+ >
+ <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
+ >閲嶇疆</el-button
+ >
+ </el-form-item>
+ </el-form>
+ <el-divider></el-divider>
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="medium"
+ @click="handleAdd"
+ v-hasPermi="['system:user:add']"
+ >鏂板</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="medium"
+ :disabled="single"
+ @click="handleUpdate"
+ v-hasPermi="['system:user:edit']"
+ >淇敼</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ size="medium"
+ :disabled="multiple"
+ @click="handleDelete"
+ v-hasPermi="['system:user:remove']"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+ <el-col :span="19">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="medium"
+ @click="handleExport"
+ v-hasPermi="['system:user:export']"
+ >瀵煎嚭</el-button
+ >
+ </div>
+ </div>
+ </el-col>
+ <!-- <el-col :span="1.5"> </el-col> -->
+ </el-row>
+ <!-- <right-toolbar
+ :showSearch.sync="showSearch"
+ @queryTable="getList"
+ :columns="columns"
+ ></right-toolbar> -->
+ <el-table
+ v-loading="loading"
+ :data="userList"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column
+ label="搴忓彿"
+ align="center"
+ key="userId"
+ prop="userId"
+ />
+
+ <el-table-column
+ label="鏍囩鍚嶇О"
+ align="center"
+ key="userName"
+ prop="userName"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="璐﹀彿"
+ align="center"
+ key="types"
+ prop="types"
+ />
+ <el-table-column
+ label="瀵嗙爜"
+ align="center"
+ key="nickName"
+ prop="nickName"
+ />
+ <el-table-column
+ label="澶囨敞"
+ align="center"
+ key="phonenumber"
+ prop="phonenumber"
+ width="120"
+ />
+ <el-table-column label="鏄惁鍚敤" align="center" key="status">
+ <template slot-scope="scope">
+ <el-switch
+ v-model="scope.row.status"
+ active-value="0"
+ inactive-value="1"
+ @change="handleStatusChange(scope.row)"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鏈�杩戞洿鏂版棩鏈�"
+ align="center"
+ prop="createTime"
+ width="160"
+ >
+ <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.createTime) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="160"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ >缂栬緫</el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleDelete(scope.row)"
+ ><span style="color: rgb(236, 55, 55)"
+ ><i class="el-icon-delete-solid"></i>鍒犻櫎</span
+ ></el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="topqueryParams.pageNum"
+ :limit.sync="topqueryParams.pageSize"
+ @pagination="getList"
+ />
+ </el-col>
+ </el-row>
+
+ <!-- 娣诲姞鎴栦慨鏀规爣绛鹃厤缃璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="addalteropen"
+ width="900px"
+ append-to-body
+ >
+ <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鏍囩鍚嶇О" prop="nickName">
+ <el-input
+ v-model="form.nickName"
+ placeholder="璇疯緭鍏�"
+ maxlength="30"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鐭俊骞冲彴璐﹀彿" prop="email">
+ <el-input
+ v-model="form.nickName"
+ placeholder="璇疯緭鍏�"
+ maxlength="30"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鐭俊骞冲彴瀵嗙爜" prop="email">
+ <el-input
+ v-model="form.nickName"
+ placeholder="璇疯緭鍏�"
+ maxlength="30"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鏄惁鍚敤">
+ <el-radio-group v-model="form.qystatus">
+ <el-radio
+ v-for="item in qyoptions"
+ :key="item.value"
+ :label="item.value"
+ >{{ item.label }}</el-radio
+ >
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞">
+ <el-input
+ v-model="form.remark"
+ type="textarea"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+ <el-button @click="cancel">鍙� 娑�</el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ listUser,
+ getUser,
+ delUser,
+ addUser,
+ updateUser,
+ resetUserPwd,
+ changeUserStatus,
+} from "@/api/system/user";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+ name: "User",
+ dicts: ["sys_normal_disable", "sys_user_sex"],
+ components: { Treeselect },
+ data() {
+ return {
+ // 閬僵灞�
+ loading: true,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ // 鎬绘潯鏁�
+ total: 0,
+ // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+ userList: null,
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
+ addalteropen: false,
+ // 閮ㄩ棬鍚嶇О
+ deptName: undefined,
+ // 榛樿瀵嗙爜
+ initPassword: undefined,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ // 瑙掕壊閫夐」
+ roleOptions: [],
+ dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
+ inputVisible: false,
+ inputValue: "",
+ previewVisible: false, //鏍囩棰勮寮规
+ radio: "",
+ radios: [],
+ previewtype: 2, //棰勮鏍囩绫诲瀷
+ total: 0, // 鎬绘潯鏁�
+ ImportQuantity: 999, //瀵兼爣绛炬暟閲�
+ //棰勮鏍囩淇℃伅
+ previewvalue: {
+ username: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ },
+ propss: { multiple: true },
+ optionss: [
+ {
+ value: 1,
+ label: "涓滃崡",
+ },
+ {
+ value: 2,
+ label: "瑗垮寳",
+ },
+ {
+ value: 3,
+ label: "浠ㄤ花浠�",
+ },
+ {
+ value: 4,
+ label: "鍏椋掗",
+ },
+ ],
+ qyoptions: [
+ {
+ value: 1,
+ label: "鍚敤",
+ },
+ {
+ value: 2,
+ label: "鍏抽棴",
+ },
+ ],
+ btoptions: [
+ {
+ value: 1,
+ label: "蹇呭~",
+ },
+ {
+ value: 2,
+ label: "闈炲繀濉�",
+ },
+ ],
+ topicoptions: [
+ {
+ value: 1,
+ label: "鍗曢��",
+ },
+ {
+ value: 2,
+ label: "澶氶��",
+ },
+ {
+ value: 3,
+ label: "濉┖",
+ },
+ ],
+ // 琛ㄥ崟鏍¢獙
+ rules: {
+ userName: [
+ { required: true, message: "鐢ㄦ埛鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
+ {
+ min: 2,
+ max: 20,
+ message: "鐢ㄦ埛鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿",
+ trigger: "blur",
+ },
+ ],
+ nickName: [
+ { required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ password: [
+ { required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
+ {
+ min: 5,
+ max: 20,
+ message: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
+ trigger: "blur",
+ },
+ ],
+ email: [
+ {
+ type: "email",
+ message: "璇疯緭鍏ユ纭殑閭鍦板潃",
+ trigger: ["blur", "change"],
+ },
+ ],
+ phonenumber: [
+ {
+ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+ message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+ trigger: "blur",
+ },
+ ],
+ IDnumber: [
+ {
+ pattern:
+ /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/,
+ message: "璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�",
+ trigger: "blur",
+ },
+ ],
+ },
+ };
+ },
+ watch: {},
+ created() {
+ this.getList();
+ this.getConfigKey("sys.user.initPassword").then((response) => {
+ this.initPassword = response.msg;
+ });
+ },
+ methods: {
+ /** 鏌ヨ鏍囩鍒楄〃 */
+ getList() {
+ this.loading = true;
+ listUser(this.addDateRange(this.topqueryParams, this.dateRange)).then(
+ (response) => {
+ this.userList = response.rows;
+ this.total = response.total;
+ this.loading = false;
+ }
+ );
+ },
+
+ // 鏍囩鐘舵�佷慨鏀�
+ handleStatusChange(row) {
+ let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+ this.$modal
+ .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵')
+ .then(function () {
+ return changeUserStatus(row.userId, row.status);
+ })
+ .then(() => {
+ this.$modal.msgSuccess(text + "鎴愬姛");
+ })
+ .catch(function () {
+ row.status = row.status === "0" ? "1" : "0";
+ });
+ },
+ // 鍙栨秷鎸夐挳
+ cancel() {
+ this.addalteropen = false;
+ this.reset();
+ },
+ // 琛ㄥ崟閲嶇疆
+ reset() {
+ this.form = {
+ userId: undefined,
+ deptId: undefined,
+ userName: undefined,
+ nickName: undefined,
+ password: undefined,
+ phonenumber: undefined,
+ email: undefined,
+ sex: undefined,
+ status: "0",
+ remark: undefined,
+ postIds: [],
+ roleIds: [],
+ };
+ this.resetForm("form");
+ },
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ handleQuery() {
+ this.topqueryParams.pageNum = 1;
+ this.getList();
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.resetForm("queryForm");
+ this.topqueryParams.deptId = undefined;
+ this.$refs.tree.setCurrentKey(null);
+ this.handleQuery();
+ },
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.userId);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ },
+ //鍒犻櫎閫夐」
+ handleClose(tag) {
+ this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
+ },
+ //瑙﹀彂鏂板杈撳叆
+ showInput() {
+ this.inputVisible = true;
+ this.$nextTick((_) => {
+ this.$refs.saveTagInput.$refs.input.focus();
+ });
+ },
+ //鑾峰彇澶卞幓鐒︾偣瑙﹀彂
+ handleInputConfirm() {
+ let inputValue = this.inputValue;
+ if (inputValue) {
+ this.dynamicTags.push(inputValue);
+ }
+ this.inputVisible = false;
+ this.inputValue = "";
+ },
+ /** 鏂板鎸夐挳鎿嶄綔 */
+ handleAdd() {
+ this.reset();
+ this.title = "鏂板鏍囩";
+ this.addalteropen = true;
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ this.title = "淇敼鏍囩";
+ this.addalteropen = true;
+ // const userId = row.userId || this.ids;
+ // getUser(userId).then((response) => {
+ // this.form = response.data;
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.$set(this.form, "postIds", response.postIds);
+ // this.$set(this.form, "roleIds", response.roleIds);
+ // this.addalteropen = true;
+ // this.form.password = "";
+ // });
+ },
+ /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
+ handleResetPwd(row) {
+ this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ closeOnClickModal: false,
+ inputPattern: /^.{5,20}$/,
+ inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
+ })
+ .then(({ value }) => {
+ resetUserPwd(row.userId, value).then((response) => {
+ this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
+ });
+ })
+ .catch(() => {});
+ },
+
+ /** 鎻愪氦鎸夐挳 */
+ submitForm: function () {
+ this.$refs["form"].validate((valid) => {
+ if (valid) {
+ if (this.form.userId != undefined) {
+ updateUser(this.form).then((response) => {
+ this.$modal.msgSuccess("淇敼鎴愬姛");
+ this.open = false;
+ this.getList();
+ });
+ } else {
+ addUser(this.form).then((response) => {
+ this.$modal.msgSuccess("鏂板鎴愬姛");
+ this.open = false;
+ this.getList();
+ });
+ }
+ }
+ });
+ },
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+ handleDelete(row) {
+ const userIds = row.userId || this.ids;
+ this.$modal
+ .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�')
+ .then(function () {
+ return delUser(userIds);
+ })
+ .then(() => {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ })
+ .catch(() => {});
+ },
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ this.download(
+ "system/user/export",
+ {
+ ...this.topqueryParams,
+ },
+ `user_${new Date().getTime()}.xlsx`
+ );
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.el-button--primary.is-plain {
+ color: #ffffff;
+ background: #409eff;
+ border-color: #4fabe9;
+}
+.document {
+ width: 100px;
+ height: 50px;
+}
+.documentf {
+ display: flex;
+ justify-content: flex-end;
+}
+.download {
+ text-align: center;
+ .el-upload__tip {
+ font-size: 23px;
+ }
+ .el-upload__text {
+ font-size: 23px;
+ }
+}
+.uploading {
+ margin-top: 20px;
+ margin: 20px;
+ padding: 30px;
+ background: #ffffff;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+}
+.el-tag + .el-tag {
+ margin-left: 10px;
+}
+.button-new-tag {
+ margin-left: 10px;
+ height: 32px;
+ line-height: 30px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+.input-new-tag {
+ width: 90px;
+ margin-left: 10px;
+ vertical-align: bottom;
+}
+.drexamine {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 30px;
+ background: #daeaf5;
+ img {
+ width: 100px;
+ height: 100px;
+ }
+}
+.qrcode-dialo {
+ // text-align: center;
+ // display: flex;
+ margin: 20px;
+ padding: 30px;
+ background: #edf1f7;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+ .topic-dev {
+ margin-bottom: 25px;
+ font-size: 20px !important;
+ .dev-text {
+ margin-bottom: 10px;
+ }
+ }
+}
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/websocket/websocket.js b/src/websocket/websocket.js
new file mode 100644
index 0000000..d7090e8
--- /dev/null
+++ b/src/websocket/websocket.js
@@ -0,0 +1,113 @@
+import { Message } from 'element-ui'
+// import { getToken } from '@/utils/authToken' // 涓庡悗绔殑鍗忓晢锛寃ebsocket璇锋眰闇�瑕佸甫涓妕oken鍙傛暟
+let websock = null
+let messageCallback = null
+let errorCallback = null
+let wsUrl = ''
+let tryTime = 0
+
+// 鎺ユ敹ws鍚庣杩斿洖鐨勬暟鎹�
+function websocketonmessage (e) {
+ console.log(e);
+ messageCallback(JSON.stringify(e.data))
+}
+
+/**
+ * 鍙戣捣websocket杩炴帴
+ * @param {Object} agentData 闇�瑕佸悜鍚庡彴浼犻�掔殑鍙傛暟鏁版嵁
+ */
+function websocketSend (agentData) {
+ // 鍔犲欢杩熸槸涓轰簡灏介噺璁﹚s杩炴帴鐘舵�佸彉涓篛PEN
+ setTimeout(() => {
+ // 娣诲姞鐘舵�佸垽鏂紝褰撲负OPEN鏃讹紝鍙戦�佹秷鎭�
+ if (websock.readyState === websock.OPEN) { // websock.OPEN = 1
+ // 鍙戠粰鍚庣鐨勬暟鎹渶瑕佸瓧绗︿覆鍖�
+ websock.send(JSON.stringify(agentData))
+ console.log('杩炴帴鎴愬姛');
+ }
+ if (websock.readyState === websock.CLOSED) { // websock.CLOSED = 3
+ console.log('websock.readyState=3')
+ Message.error('ws杩炴帴寮傚父锛岃绋嶅�欓噸璇昪')
+ errorCallback()
+ }
+ }, 500)
+}
+
+// 鍏抽棴ws杩炴帴
+function websocketclose (e) {
+ // e.code === 1000 琛ㄧず姝e父鍏抽棴銆� 鏃犺涓轰綍鐩殑鑰屽垱寤�, 璇ラ摼鎺ラ兘宸叉垚鍔熷畬鎴愪换鍔°��
+ // e.code !== 1000 琛ㄧず闈炴甯稿叧闂��
+ if (e && e.code !== 1000) {
+ Message.error('ws杩炴帴寮傚父锛岃绋嶅�欓噸璇昩')
+ errorCallback()
+ // // 濡傛灉闇�瑕佽缃紓甯搁噸杩炲垯鍙浛鎹负涓嬮潰鐨勪唬鐮侊紝鑷杩涜娴嬭瘯
+ // if (tryTime < 10) {
+ // setTimeout(function() {
+ // websock = null
+ // tryTime++
+ // initWebSocket()
+ // console.log(`绗�${tryTime}娆¢噸杩瀈)
+ // }, 3 * 1000)
+ //} else {
+ // Message.error('閲嶈繛澶辫触锛佽绋嶅悗閲嶈瘯')
+ //}
+ }
+}
+// 寤虹珛ws杩炴帴
+function websocketOpen (e) {
+ // console.log('ws杩炴帴鎴愬姛')
+}
+
+// 鍒濆鍖杦eosocket
+function initWebSocket () {
+ if (typeof (WebSocket) === 'undefined') {
+ Message.error('鎮ㄧ殑娴忚鍣ㄤ笉鏀寔WebSocket锛屾棤娉曡幏鍙栨暟鎹�')
+ return false
+ }
+
+// const token = 'JWT=' + getToken()
+ // ws璇锋眰瀹屾暣鍦板潃
+// const requstWsUrl = wsUrl + '?' + token
+ const requstWsUrl = wsUrl
+ websock = new WebSocket(requstWsUrl)
+
+ websock.onmessage = function (e) {
+ websocketonmessage(e)
+ }
+ websock.onopen = function () {
+ websocketOpen()
+ }
+ websock.onerror = function () {
+ Message.error('ws杩炴帴寮傚父锛岃绋嶅�欓噸璇昦')
+ errorCallback()
+ }
+ websock.onclose = function (e) {
+ // websocketclose(e)
+ }
+}
+
+/**
+ * 鍙戣捣websocket璇锋眰鍑芥暟
+ * @param {string} url ws杩炴帴鍦板潃
+ * @param {Object} agentData 浼犵粰鍚庡彴鐨勫弬鏁�
+ * @param {function} successCallback 鎺ユ敹鍒皐s鏁版嵁锛屽鏁版嵁杩涜澶勭悊鐨勫洖璋冨嚱鏁�
+ * @param {function} errCallback ws杩炴帴閿欒鐨勫洖璋冨嚱鏁�
+ */
+export function sendWebsocket (url, agentData, successCallback, errCallback) {
+ wsUrl = url
+ initWebSocket()
+ messageCallback = successCallback
+ errorCallback = errCallback
+ websocketSend(agentData)
+}
+
+/**
+ * 鍏抽棴websocket鍑芥暟
+ */
+export function closeWebsocket () {
+ if (websock) {
+ websock.close() // 鍏抽棴websocket
+ websock.onclose() // 鍏抽棴websocket
+ }
+}
+
--
Gitblit v1.9.3