From 958f682227fd2aae9efd5791c89fa3ef0f4cdc4c Mon Sep 17 00:00:00 2001 From: heimawl <1785969728@qq.com> Date: 星期四, 29 六月 2023 18:38:53 +0800 Subject: [PATCH] 备注信息 --- 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 f14e1c0..89fe2f8 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