From 8539cd011187d85633204fc22a9c7fc7fd008605 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期二, 22 八月 2023 09:57:09 +0800
Subject: [PATCH] Merge branch 'wulong' of http://116.62.18.175:6699/r/~yxh/smartor-web into yxh01
---
src/views/followvisit/outpatient/index.vue | 897 +++
src/views/tool/module/Editinterface.vue | 255 +
src/views/sfstatistics/Voicedetail/index.vue | 379 +
vue.config.js | 3
src/views/sfstatistics/statement/index.vue | 952 ++++
src/views/shortmessage/communication/index.vue | 90
src/layout/components/Navbar.vue | 8
src/views/patient/subsequent/index.vue | 17
src/views/followvisit/satisfaction/index.vue | 897 +++
src/views/sfstatistics/propaganda/index.vue | 951 ++++
src/api/noteapi/chitchat.js | 11
src/views/patient/propaganda/index.vue | 17
src/views/sfstatistics/analyse/index.vue | 107
src/views/followvisit/record/detailpage/index.vue | 136
src/views/system/label/index.vue | 4
src/views/patient/review/index.vue | 17
src/views/shortmessage/aovideo/index.vue | 239 +
src/views/followvisit/tasklist/index.vue | 897 +++
src/views/patient/physical/index.vue | 17
src/views/tool/module/classifyone.vue | 631 ++
src/views/tool/module/classifytwo.vue | 177
src/views/complaint/complaintmy/index.vue | 877 +++
src/websocket/lemon-message-voice.vue | 31
src/views/patient/questionnaire/index.vue | 17
src/views/followvisit/linem/index.vue | 798 +++
src/views/followvisit/record/index.vue | 1092 ++++
src/views/shortmessage/messagebank/compile/index.vue | 155
src/views/shortmessage/aoprojection/index.vue | 230
/dev/null | 35
src/views/login.vue | 7
src/websocket/websocket.js | 4
src/main.js | 2
src/views/sfstatistics/percentage/index.vue | 884 +++
src/views/patient/servefn/index.vue | 27
package.json | 2
src/views/shortmessage/messagebank/index.vue | 340
src/views/tool/module/classifythreea.vue | 792 +++
src/views/shortmessage/aoconnect/index.vue | 17
src/views/complaint/complaintlist/index.vue | 893 +++
src/views/followvisit/discharge/index.vue | 897 +++
src/views/patient/follow/index.vue | 17
41 files changed, 13,593 insertions(+), 226 deletions(-)
diff --git a/package.json b/package.json
index e068a32..377e396 100644
--- a/package.json
+++ b/package.json
@@ -37,6 +37,7 @@
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
+ "@vue/babel-plugin-jsx": "^1.1.5",
"axios": "0.24.0",
"clipboard": "2.0.8",
"codemirror": "^5.65.13",
@@ -60,6 +61,7 @@
"quill-image-resize-module": "^3.0.0",
"sass": "^1.63.6",
"screenfull": "5.0.2",
+ "socket.io": "^2.1.1",
"sortablejs": "1.10.2",
"style-loader": "^3.3.3",
"stylus-loader": "^7.1.3",
diff --git a/src/api/noteapi/chitchat.js b/src/api/noteapi/chitchat.js
new file mode 100644
index 0000000..12c05f5
--- /dev/null
+++ b/src/api/noteapi/chitchat.js
@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+import { parseStrEmpty } from "@/utils/ruoyi";//澶勭悊瀛楃涓�,und,null杞崲涓�'';
+
+// 鑱婂ぉ妗嗕笂浼犳枃浠�
+export function chitchatapi(data) {
+ return request({
+ url: '/system/file/admin/uploadFile',
+ method: 'post',
+ data: data
+ })
+};
\ No newline at end of file
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 39b3dad..9aa306e 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -9,13 +9,13 @@
<template v-if="device!=='mobile'">
<search id="header-search" class="right-menu-item" />
- <el-tooltip content="婧愮爜鍦板潃" effect="dark" placement="bottom">
+ <!-- <el-tooltip content="婧愮爜鍦板潃" effect="dark" placement="bottom">
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
- </el-tooltip>
+ </el-tooltip> -->
- <el-tooltip content="鏂囨。鍦板潃" effect="dark" placement="bottom">
+ <!-- <el-tooltip content="鏂囨。鍦板潃" effect="dark" placement="bottom">
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
- </el-tooltip>
+ </el-tooltip> -->
<screenfull id="screenfull" class="right-menu-item hover-effect" />
diff --git a/src/main.js b/src/main.js
index e21d599..5d1eefd 100644
--- a/src/main.js
+++ b/src/main.js
@@ -64,6 +64,8 @@
selectDictLabels,
handleTree,
} from "@/utils/ruoyi";
+import LemonMessageVoice from './websocket/lemon-message-voice';
+Vue.component(LemonMessageVoice.name,LemonMessageVoice);
// 鍒嗛〉缁勪欢
import Pagination from "@/components/Pagination";
// 鑷畾涔夎〃鏍煎伐鍏风粍浠�
diff --git a/src/views/complaint/complaintlist/index.vue b/src/views/complaint/complaintlist/index.vue
new file mode 100644
index 0000000..a1c32bd
--- /dev/null
+++ b/src/views/complaint/complaintlist/index.vue
@@ -0,0 +1,893 @@
+<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="鎶曡瘔鎻愪氦鏃堕棿">
+ <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="userName">
+ <el-input
+ v-model="topqueryParams.userName"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+
+ <el-form-item label="琚姇璇夌瀹�" prop="status">
+ <el-cascader
+ v-model="topqueryParams.tagid"
+ :options="optionss"
+ :props="propss"
+ clearable
+ ></el-cascader>
+ </el-form-item>
+ <el-form-item label="鎶曡瘔绫诲瀷" prop="status">
+ <el-select v-model="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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-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="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="绾у埆"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ /><el-table-column
+ label="鎻愪氦浜�"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+ <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"
+ prop="createTime"
+ width="160"
+ >
+ <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.createTime) }}</span>
+ </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" v-if="scope.row.userId !== 1">
+ <el-button
+ size="medium"
+ type="text"
+ icon="el-icon-edit"
+ @click="Referencequestion(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ >棰勮</el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ icon="el-icon-edit"
+ @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
+ :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-col :span="12">
+ <el-form-item label="鎶曡瘔绫诲瀷" prop="deptId">
+ <el-select v-model="form.types" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-form-item label="绛旀閫夐」" prop="email">
+ <el-tag
+ :key="tag"
+ v-for="tag in dynamicTags"
+ closable
+ :disable-transitions="false"
+ @close="handleClose(tag)"
+ >
+ {{ tag }}
+ </el-tag>
+ <el-input
+ class="input-new-tag"
+ v-if="inputVisible"
+ v-model="inputValue"
+ ref="saveTagInput"
+ size="small"
+ @keyup.enter.native="handleInputConfirm"
+ @blur="handleInputConfirm"
+ >
+ </el-input>
+ <el-button
+ v-else
+ class="button-new-tag"
+ size="small"
+ @click="showInput"
+ >+ 鏂板閫夐」</el-button
+ >
+ </el-form-item>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔鏍囩" prop="email">
+ <el-cascader
+ v-model="form.totagid"
+ :options="optionss"
+ :props="propss"
+ clearable
+ ></el-cascader>
+ </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-col :span="12">
+ <el-form-item label="鏄惁蹇呭~">
+ <el-radio-group v-model="form.btstatus">
+ <el-radio
+ v-for="item in btoptions"
+ :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>
+ <!-- 鎶曡瘔棰勮寮规 -->
+ <el-dialog width="30%" title="鎶曡瘔棰勮" :visible.sync="previewVisible">
+ <div class="qrcode-dialo">
+ <!-- 鍗曢�� -->
+ <div class="topic-dev" v-if="previewtype == 1">
+ <div class="dev-text">
+ [鍗曢�塢  <span>{{ previewvalue.username }}</span>
+ </div>
+ <div class="dev-xx">
+ <el-radio-group v-model="radio">
+ <el-radio
+ v-for="(items, index) in dynamicTags"
+ :key="index"
+ :label="index"
+ >{{ items }}</el-radio
+ >
+ </el-radio-group>
+ </div>
+ </div>
+ <!-- 澶氶�� -->
+ <div class="topic-dev" v-else-if="previewtype == 2">
+ <div class="dev-text">
+ [澶氶�塢  <span>{{ previewvalue.username }}</span>
+ </div>
+ <div class="dev-xx">
+ <el-checkbox-group v-model="radios">
+ <el-checkbox
+ v-for="(items, index) in dynamicTags"
+ :key="index"
+ :label="index"
+ >
+ {{ items }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </div>
+ </div>
+ <!-- 濉┖ -->
+ <div class="topic-dev" v-if="previewtype == 3">
+ <div class="dev-text">
+ [濉┖]  <span>{{ previewvalue.username }}</span>
+ </div>
+ <div class="dev-xx">
+ <el-input placeholder="璇疯緭鍏ョ瓟妗�" v-model="radioas" clearable>
+ </el-input>
+ </div>
+ </div>
+ </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: "",
+ },
+ //瀵煎叆杩涘害
+ dractive: 1,
+ // 瀵煎叆灞曠ず琛ㄥ崟
+ uploadingData: {},
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ 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;
+ }
+ );
+ },
+ // 鏌ョ湅鎶曡瘔璇︽儏
+ Referencequestion(row) {
+ this.previewVisible = true;
+ },
+
+ // 鎶曡瘔鐘舵�佷慨鏀�
+ 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();
+ getUser().then((response) => {
+ this.postOptions = response.posts;
+ this.roleOptions = response.roles;
+ this.addalteropen = true;
+ this.title = "鏂板鎶曡瘔";
+ this.form.password = this.initPassword;
+ });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ 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.title = "淇敼鐢ㄦ埛";
+ 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/views/complaint/complaintmy/index.vue b/src/views/complaint/complaintmy/index.vue
new file mode 100644
index 0000000..fcdc24c
--- /dev/null
+++ b/src/views/complaint/complaintmy/index.vue
@@ -0,0 +1,877 @@
+<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="status">
+ <el-select v-model="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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-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"
+ sortable
+ 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="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="绾у埆"
+ align="center"
+ key="topicnumberaa"
+ prop="topicnumberaa"
+ sortable
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="鎶曡瘔鏃ユ湡"
+ sortable
+ 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
+ >
+ </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" label-width="80px">
+ <el-row :gutter="20">
+ <el-col :span="12"
+ ><el-form-item label="鐥呬汉濮撳悕">
+ <el-input v-model="form.name"></el-input> </el-form-item
+ ></el-col>
+ <el-col :span="12"
+ ><el-form-item label="鎬у埆">
+ <el-radio v-model="form.radio" label="1">鐢�</el-radio>
+ <el-radio v-model="form.radio" label="2">濂�</el-radio>
+ <el-radio v-model="form.radio" label="3">鏈煡</el-radio>
+ </el-form-item></el-col
+ >
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鑱旂郴鐢佃瘽">
+ <div style="margin-top: 15px">
+ <el-input
+ placeholder="璇疯緭鍏ユ墜鏈哄彿"
+ v-model="form.input3"
+ class="input-with-select"
+ >
+ <el-button slot="append" icon="el-icon-search"></el-button>
+ </el-input>
+ </div>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔绫诲瀷">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨娲诲姩鍖哄煙">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔鏃ユ湡">
+ <el-date-picker
+ v-model="form.value2"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptions"
+ >
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔绾у埆">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨娲诲姩鍖哄煙">
+ <el-option label="涓�绾�" value="shanghai"></el-option>
+ <el-option label="浜岀骇" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12"
+ ><el-form-item label="闂ㄨ瘖鏃ユ湡">
+ <el-date-picker
+ v-model="form.value2"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptions"
+ >
+ </el-date-picker> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔瀵硅薄鎼滅储">
+ <el-select
+ v-model="value"
+ multiple
+ filterable
+ remote
+ reserve-keyword
+ placeholder="璇疯緭鍏ュ叧閿瘝"
+ :remote-method="remoteMethod"
+ :loading="loading"
+ >
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔瀵硅薄鏄剧ず">
+ <div>{{ form.name }}</div>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔鎻忚堪">
+ <el-input type="textarea" v-model="form.desc"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎶曡瘔瑕佹眰">
+ <el-input type="textarea" v-model="form.desc"></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: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ value: [],
+ list: [],
+ loading: false,
+ states: [
+ "Alabama",
+ "Alaska",
+ "Arizona",
+ "Arkansas",
+ "California",
+ "Colorado",
+ "Connecticut",
+ "Delaware",
+ "Florida",
+ "Georgia",
+ "Hawaii",
+ "Idaho",
+ "Illinois",
+ "Indiana",
+ "Iowa",
+ "Kansas",
+ "Kentucky",
+ "Louisiana",
+ "Maine",
+ "Maryland",
+ "Massachusetts",
+ "Michigan",
+ "Minnesota",
+ "Mississippi",
+ "Missouri",
+ "Montana",
+ "Nebraska",
+ "Nevada",
+ "New Hampshire",
+ "New Jersey",
+ "New Mexico",
+ "New York",
+ "North Carolina",
+ "North Dakota",
+ "Ohio",
+ "Oklahoma",
+ "Oregon",
+ "Pennsylvania",
+ "Rhode Island",
+ "South Carolina",
+ "South Dakota",
+ "Tennessee",
+ "Texas",
+ "Utah",
+ "Vermont",
+ "Virginia",
+ "Washington",
+ "West Virginia",
+ "Wisconsin",
+ "Wyoming",
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ //瀵煎叆杩涘害
+ dractive: 1,
+ // 瀵煎叆灞曠ず琛ㄥ崟
+ uploadingData: {},
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+ options: [],
+
+ 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;
+ });
+ },
+ // 鎼滅储
+ mounted() {
+ this.list = this.states.map((item) => {
+ return { value: `value:${item}`, label: `label:${item}` };
+ });
+ },
+ 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.previewVisible = true;
+ },
+ // 娣诲姞寮规鎼滅储
+ remoteMethod(query) {
+ if (query !== "") {
+ this.loading = true;
+ setTimeout(() => {
+ this.loading = false;
+ this.options = this.list.filter((item) => {
+ return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+ });
+ }, 200);
+ } else {
+ this.options = [];
+ }
+ },
+ // 鎶曡瘔鐘舵�佷慨鏀�
+ 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.addalteropen = true;
+ // getUser().then((response) => {
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.title = "鏂板鎶曡瘔";
+ // this.form.password = this.initPassword;
+ // });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ 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.title = "淇敼鐢ㄦ埛";
+ 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/views/followvisit/discharge/index.vue b/src/views/followvisit/discharge/index.vue
new file mode 100644
index 0000000..3b969de
--- /dev/null
+++ b/src/views/followvisit/discharge/index.vue
@@ -0,0 +1,897 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+
+ <el-form
+ :model="topqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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-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"
+ sortable
+ 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"
+ >
+ <template slot-scope="scope">
+ <span style="margin-left: 10px"
+ >{{ scope.row.date }}/{{ scope.row.data }}</span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎵ц鐘舵��"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <div>鎵ц瀹屾垚/鎵ц澶辫触</div>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="瀹℃牳浜�"
+ align="center"
+ key="topicnumberaa"
+ prop="topicnumberaa"
+ sortable
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="瀹℃牳鏃堕棿"
+ sortable
+ 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="120"
+ 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-zx"
+ ><i class="el-icon-s-promotion"></i>寮�濮嬫墽琛�</span
+ ></el-button
+ >
+ </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-xq"
+ ><i class="el-icon-s-data"></i>璇︽儏</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-bb"
+ ><i class="el-icon-s-order"></i>鎶ヨ〃</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-sc"
+ ><i class="el-icon-delete"></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-row>
+ <!-- 娣诲姞鎴栦慨鏀归棬璇婇殢璁垮璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="addalteropen"
+ width="700px"
+ append-to-body
+ >
+ <el-form ref="form" :model="form" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12"
+ ><el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="form.name"></el-input> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="鎵�灞炵瀹�">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item></el-col
+ ></el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="闅忚绫诲瀷">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鏈嶅姟妯″潡">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="闂ㄨ瘖闅忚瑕佹眰">
+ <el-input type="textarea" v-model="form.desc"></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: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ value: [],
+ list: [],
+ loading: false,
+ states: [
+ "Alabama",
+ "Alaska",
+ "Arizona",
+ "Arkansas",
+ "California",
+ "Colorado",
+ "Connecticut",
+ "Delaware",
+ "Florida",
+ "Georgia",
+ "Hawaii",
+ "Idaho",
+ "Illinois",
+ "Indiana",
+ "Iowa",
+ "Kansas",
+ "Kentucky",
+ "Louisiana",
+ "Maine",
+ "Maryland",
+ "Massachusetts",
+ "Michigan",
+ "Minnesota",
+ "Mississippi",
+ "Missouri",
+ "Montana",
+ "Nebraska",
+ "Nevada",
+ "New Hampshire",
+ "New Jersey",
+ "New Mexico",
+ "New York",
+ "North Carolina",
+ "North Dakota",
+ "Ohio",
+ "Oklahoma",
+ "Oregon",
+ "Pennsylvania",
+ "Rhode Island",
+ "South Carolina",
+ "South Dakota",
+ "Tennessee",
+ "Texas",
+ "Utah",
+ "Vermont",
+ "Virginia",
+ "Washington",
+ "West Virginia",
+ "Wisconsin",
+ "Wyoming",
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: 1,
+ label: "寰呭鏍�",
+ },
+ {
+ value: 2,
+ label: "鎵ц涓�",
+ },
+ {
+ value: 3,
+ label: "鎵ц瀹屾垚",
+ },
+ {
+ value: 4,
+ 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;
+ });
+ },
+ // 鎼滅储
+ mounted() {
+ this.list = this.states.map((item) => {
+ return { value: `value:${item}`, label: `label:${item}` };
+ });
+ },
+ 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.previewVisible = true;
+ },
+ // 娣诲姞寮规鎼滅储
+ remoteMethod(query) {
+ if (query !== "") {
+ this.loading = true;
+ setTimeout(() => {
+ this.loading = false;
+ this.options = this.list.filter((item) => {
+ return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+ });
+ }, 200);
+ } else {
+ this.options = [];
+ }
+ },
+ // 闂ㄨ瘖闅忚鐘舵�佷慨鏀�
+ 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.addalteropen = true;
+ // getUser().then((response) => {
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.title = "鏂板闂ㄨ瘖闅忚";
+ // this.form.password = this.initPassword;
+ // });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ 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.title = "淇敼鐢ㄦ埛";
+ 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;
+ }
+ }
+}
+.button-bb {
+ font-weight: 500;
+ color: #2ba05c;
+}
+.button-xq {
+ font-weight: 500;
+ color: #409eff;
+}
+.button-sc {
+ font-weight: 500;
+ color: #dd302a;
+}
+.button-zx {
+ background: #4fabe9;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/views/followvisit/linem/index.vue b/src/views/followvisit/linem/index.vue
new file mode 100644
index 0000000..a21e535
--- /dev/null
+++ b/src/views/followvisit/linem/index.vue
@@ -0,0 +1,798 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+ <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="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>
+ <!-- <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"
+ sortable
+ 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"
+ >
+ <template slot-scope="scope">
+ <span style="margin-left: 10px"
+ >{{ scope.row.date }}/{{ scope.row.data }}</span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎵ц鐘舵��"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <div>鎵ц瀹屾垚/鎵ц澶辫触</div>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="瀹℃牳浜�"
+ align="center"
+ key="topicnumberaa"
+ prop="topicnumberaa"
+ sortable
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="瀹℃牳鏃堕棿"
+ sortable
+ 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="120"
+ 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-zx"
+ ><i class="el-icon-s-promotion"></i>寮�濮嬫墽琛�</span
+ ></el-button
+ >
+ </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-xq"
+ ><i class="el-icon-s-data"></i>璇︽儏</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-bb"
+ ><i class="el-icon-s-order"></i>鎶ヨ〃</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-sc"
+ ><i class="el-icon-delete"></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-row>
+ <!-- 娣诲姞鎴栦慨鏀归棬璇婇殢璁垮璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="addalteropen"
+ width="700px"
+ append-to-body
+ >
+ <el-form ref="form" :model="form" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12"
+ ><el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="form.name"></el-input> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="鎵�灞炵瀹�">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item></el-col
+ ></el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="闅忚绫诲瀷">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鏈嶅姟妯″潡">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="闂ㄨ瘖闅忚瑕佹眰">
+ <el-input type="textarea" v-model="form.desc"></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: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ value: [],
+ list: [],
+ loading: false,
+ states: [
+ "Alabama",
+ "Alaska",
+ "Arizona",
+ "Arkansas",
+ "California",
+ "Colorado",
+ "Connecticut",
+ "Delaware",
+ "Florida",
+ "Georgia",
+ "Hawaii",
+ "Idaho",
+ "Illinois",
+ "Indiana",
+ "Iowa",
+ "Kansas",
+ "Kentucky",
+ "Louisiana",
+ "Maine",
+ "Maryland",
+ "Massachusetts",
+ "Michigan",
+ "Minnesota",
+ "Mississippi",
+ "Missouri",
+ "Montana",
+ "Nebraska",
+ "Nevada",
+ "New Hampshire",
+ "New Jersey",
+ "New Mexico",
+ "New York",
+ "North Carolina",
+ "North Dakota",
+ "Ohio",
+ "Oklahoma",
+ "Oregon",
+ "Pennsylvania",
+ "Rhode Island",
+ "South Carolina",
+ "South Dakota",
+ "Tennessee",
+ "Texas",
+ "Utah",
+ "Vermont",
+ "Virginia",
+ "Washington",
+ "West Virginia",
+ "Wisconsin",
+ "Wyoming",
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: 1,
+ label: "寰呭鏍�",
+ },
+ {
+ value: 2,
+ label: "鎵ц涓�",
+ },
+ {
+ value: 3,
+ label: "鎵ц瀹屾垚",
+ },
+ {
+ value: 4,
+ 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;
+ });
+ },
+ // 鎼滅储
+ mounted() {
+ this.list = this.states.map((item) => {
+ return { value: `value:${item}`, label: `label:${item}` };
+ });
+ },
+ 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.previewVisible = true;
+ },
+ // 娣诲姞寮规鎼滅储
+ remoteMethod(query) {
+ if (query !== "") {
+ this.loading = true;
+ setTimeout(() => {
+ this.loading = false;
+ this.options = this.list.filter((item) => {
+ return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+ });
+ }, 200);
+ } else {
+ this.options = [];
+ }
+ },
+ // 闂ㄨ瘖闅忚鐘舵�佷慨鏀�
+ 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.addalteropen = true;
+ // getUser().then((response) => {
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.title = "鏂板闂ㄨ瘖闅忚";
+ // this.form.password = this.initPassword;
+ // });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ 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.title = "淇敼鐢ㄦ埛";
+ 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;
+ }
+ }
+}
+.button-bb {
+ font-weight: 500;
+ color: #2ba05c;
+}
+.button-xq {
+ font-weight: 500;
+ color: #409eff;
+}
+.button-sc {
+ font-weight: 500;
+ color: #dd302a;
+}
+.button-zx {
+ background: #4fabe9;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/views/followvisit/outpatient/index.vue b/src/views/followvisit/outpatient/index.vue
new file mode 100644
index 0000000..3b969de
--- /dev/null
+++ b/src/views/followvisit/outpatient/index.vue
@@ -0,0 +1,897 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+
+ <el-form
+ :model="topqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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-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"
+ sortable
+ 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"
+ >
+ <template slot-scope="scope">
+ <span style="margin-left: 10px"
+ >{{ scope.row.date }}/{{ scope.row.data }}</span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎵ц鐘舵��"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <div>鎵ц瀹屾垚/鎵ц澶辫触</div>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="瀹℃牳浜�"
+ align="center"
+ key="topicnumberaa"
+ prop="topicnumberaa"
+ sortable
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="瀹℃牳鏃堕棿"
+ sortable
+ 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="120"
+ 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-zx"
+ ><i class="el-icon-s-promotion"></i>寮�濮嬫墽琛�</span
+ ></el-button
+ >
+ </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-xq"
+ ><i class="el-icon-s-data"></i>璇︽儏</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-bb"
+ ><i class="el-icon-s-order"></i>鎶ヨ〃</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-sc"
+ ><i class="el-icon-delete"></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-row>
+ <!-- 娣诲姞鎴栦慨鏀归棬璇婇殢璁垮璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="addalteropen"
+ width="700px"
+ append-to-body
+ >
+ <el-form ref="form" :model="form" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12"
+ ><el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="form.name"></el-input> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="鎵�灞炵瀹�">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item></el-col
+ ></el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="闅忚绫诲瀷">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鏈嶅姟妯″潡">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="闂ㄨ瘖闅忚瑕佹眰">
+ <el-input type="textarea" v-model="form.desc"></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: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ value: [],
+ list: [],
+ loading: false,
+ states: [
+ "Alabama",
+ "Alaska",
+ "Arizona",
+ "Arkansas",
+ "California",
+ "Colorado",
+ "Connecticut",
+ "Delaware",
+ "Florida",
+ "Georgia",
+ "Hawaii",
+ "Idaho",
+ "Illinois",
+ "Indiana",
+ "Iowa",
+ "Kansas",
+ "Kentucky",
+ "Louisiana",
+ "Maine",
+ "Maryland",
+ "Massachusetts",
+ "Michigan",
+ "Minnesota",
+ "Mississippi",
+ "Missouri",
+ "Montana",
+ "Nebraska",
+ "Nevada",
+ "New Hampshire",
+ "New Jersey",
+ "New Mexico",
+ "New York",
+ "North Carolina",
+ "North Dakota",
+ "Ohio",
+ "Oklahoma",
+ "Oregon",
+ "Pennsylvania",
+ "Rhode Island",
+ "South Carolina",
+ "South Dakota",
+ "Tennessee",
+ "Texas",
+ "Utah",
+ "Vermont",
+ "Virginia",
+ "Washington",
+ "West Virginia",
+ "Wisconsin",
+ "Wyoming",
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: 1,
+ label: "寰呭鏍�",
+ },
+ {
+ value: 2,
+ label: "鎵ц涓�",
+ },
+ {
+ value: 3,
+ label: "鎵ц瀹屾垚",
+ },
+ {
+ value: 4,
+ 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;
+ });
+ },
+ // 鎼滅储
+ mounted() {
+ this.list = this.states.map((item) => {
+ return { value: `value:${item}`, label: `label:${item}` };
+ });
+ },
+ 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.previewVisible = true;
+ },
+ // 娣诲姞寮规鎼滅储
+ remoteMethod(query) {
+ if (query !== "") {
+ this.loading = true;
+ setTimeout(() => {
+ this.loading = false;
+ this.options = this.list.filter((item) => {
+ return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+ });
+ }, 200);
+ } else {
+ this.options = [];
+ }
+ },
+ // 闂ㄨ瘖闅忚鐘舵�佷慨鏀�
+ 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.addalteropen = true;
+ // getUser().then((response) => {
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.title = "鏂板闂ㄨ瘖闅忚";
+ // this.form.password = this.initPassword;
+ // });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ 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.title = "淇敼鐢ㄦ埛";
+ 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;
+ }
+ }
+}
+.button-bb {
+ font-weight: 500;
+ color: #2ba05c;
+}
+.button-xq {
+ font-weight: 500;
+ color: #409eff;
+}
+.button-sc {
+ font-weight: 500;
+ color: #dd302a;
+}
+.button-zx {
+ background: #4fabe9;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
new file mode 100644
index 0000000..1b1ffd7
--- /dev/null
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -0,0 +1,136 @@
+<template>
+ <div class="Followupdetailspage">
+ <div class="Followuserinfo">
+ <div class="userinfo-text">闅忚璇︽儏</div>
+ <div class="userinfo-value">
+ <span><i class="el-icon-user-solid"></i>鍚撮緳</span><span>鐢�</span
+ ><span><i class="el-icon-user-solid"></i>13803963330</span
+ ><span>鍑洪櫌鏃堕棿锛�:2023-03-29 08:57:57</span>
+ </div>
+ <div><el-button type="success">闅忚鍚庣煭淇�</el-button></div>
+ </div>
+ <div>
+ <el-tabs type="border-card">
+ <el-tab-pane>
+ <span class="mulsz" slot="label"
+ ><i class="el-icon-headset"></i> 璇煶璇︽儏1</span
+ >
+ <div class="borderdiv">
+ <div>
+ <div class="leftside">
+ <i class="el-icon-phone-outline"></i><span>璇存拻鍟婂皬璇�</span>
+ </div>
+ <div class="offside">
+ <i class="el-icon-user"></i>
+ <div class="offside-value">
+ <el-input v-model="input"></el-input>
+ <el-radio v-model="radio" label="1">澶囬�夐」</el-radio>
+ <el-radio v-model="radio" label="2">澶囬�夐」2</el-radio>
+ <el-radio v-model="radio" label="3">澶囬�夐」3</el-radio>
+ <el-radio v-model="radio" label="4">澶囬�夐」4</el-radio>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-tab-pane>
+ <el-tab-pane>
+ <span class="mulsz" slot="label"
+ ><i class="el-icon-headset"></i> 璇煶璇︽儏2</span
+ >
+ <div class="borderdiv">璇煶璇︽儏2</div>
+ </el-tab-pane>
+ <el-tab-pane>
+ <span class="mulsz" slot="label"
+ ><i class="el-icon-notebook-1"></i> 璇煶淇℃伅</span
+ >
+ <div class="borderdiv">璇煶淇℃伅</div>
+ </el-tab-pane>
+ <el-tab-pane>
+ <span class="mulsz" slot="label"
+ ><i class="el-icon-phone-outline"></i> 澶栧懠淇℃伅</span
+ >
+ <div class="borderdiv">澶栧懠淇℃伅</div>
+ </el-tab-pane>
+ <el-tab-pane>
+ <span class="mulsz" slot="label"
+ ><i class="el-icon-s-operation"></i> 鏍囩鐘舵��</span
+ >
+ <div class="borderdiv">
+ <el-radio v-model="radio" label="1">涓嶅鐞�</el-radio>
+ <el-radio v-model="radio" label="2">缁х画璺熻釜</el-radio
+ ><el-radio v-model="radio" label="3">閫氱煡鍖婚櫌灏辫瘖</el-radio>
+ </div>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ radio: "1",
+ userid: "",
+ input: "",
+ radio: "2",
+ };
+ },
+
+ created() {},
+
+ methods: {},
+};
+</script>
+
+<style lang="scss" scoped>
+.Followuserinfo {
+ margin: 20px 10px;
+ display: flex;
+ align-items: center;
+ .userinfo-text {
+ font-size: 20px;
+ margin-right: 20px;
+ }
+ .userinfo-value {
+ color: rgb(15, 139, 211);
+ span {
+ margin-right: 20px;
+ }
+ }
+}
+.borderdiv {
+ min-height: 60vh;
+ font-size: 20px;
+ padding: 30px;
+ .leftside {
+ margin-bottom: 30px;
+ span {
+ width: 400px;
+ margin-left: 20px;
+ padding: 10px;
+ color: #fff;
+ background: rgb(110, 196, 247);
+ border-radius: 10px;
+ }
+ }
+ .offside {
+ display: flex;
+ flex-direction: row-reverse;
+ .offside-value {
+ padding: 10px;
+ background: rgb(217, 173, 253);
+ border-radius: 10px;
+ color: #fff;
+ margin-right: 20px;
+ }
+ }
+}
+::v-deep.offside-value .el-radio__label {
+ color: #fff;
+}
+.mulsz {
+ font-size: 25px;
+ margin-top: 20px;
+}
+</style>
diff --git a/src/views/followvisit/record/index.vue b/src/views/followvisit/record/index.vue
new file mode 100644
index 0000000..0b922c4
--- /dev/null
+++ b/src/views/followvisit/record/index.vue
@@ -0,0 +1,1092 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+
+ <el-form
+ :model="topqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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-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="1.5">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-upload2"
+ size="medium"
+ @click="handleExport"
+ v-hasPermi="['system:user:export']"
+ >瀵煎嚭</el-button
+ >
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="1.5">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-download"
+ size="medium"
+ @click="toleadExport"
+ v-hasPermi="['system:user:export']"
+ >瀵煎叆</el-button
+ >
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="1.5">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="info"
+ icon="el-icon-refresh"
+ size="medium"
+ @click="TaskReset"
+ v-hasPermi="['system:user:export']"
+ >浠诲姟閲嶇疆</el-button
+ >
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="1.5">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="success"
+ icon="el-icon-position"
+ size="medium"
+ @click="AllStarted"
+ v-hasPermi="['system:user:export']"
+ >鍏ㄩ儴寮�濮�</el-button
+ >
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="1.5">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="warning"
+ icon="el-icon-remove"
+ size="medium"
+ @click="AllStop"
+ v-hasPermi="['system:user:export']"
+ >鍏ㄩ儴鍋滄</el-button
+ >
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="1.5">
+ <div class="documentf">
+ <div class="document">
+ <el-button
+ type="primary"
+ icon="el-icon-remove"
+ size="medium"
+ @click="Sendtimesetting"
+ 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"
+ sortable
+ 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"
+ >
+ <template slot-scope="scope">
+ <span style="margin-left: 10px"
+ >{{ scope.row.date }}/{{ scope.row.data }}</span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎵ц鐘舵��"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <div>鎵ц瀹屾垚/寰呭鏍�</div>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="瀹℃牳浜�"
+ align="center"
+ key="topicnumberaa"
+ prop="topicnumberaa"
+ sortable
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="瀹℃牳鏃堕棿"
+ sortable
+ 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="200"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ @click="followupvisit(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-bb"
+ ><i class="el-icon-s-promotion"></i>閲嶆柊闅忚</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handlestop(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-sc"
+ ><i class="el-icon-delete"></i>鍋滄</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="Seedetails(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-zx"
+ ><i class="el-icon-s-order"></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-row>
+ <!-- 娣诲姞鎴栦慨鏀归棬璇婇殢璁垮璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="addalteropen"
+ width="700px"
+ append-to-body
+ >
+ <el-form ref="form" :model="form" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12"
+ ><el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="form.name"></el-input> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="鎵�灞炵瀹�">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item></el-col
+ ></el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="闅忚绫诲瀷">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鏈嶅姟妯″潡">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="闂ㄨ瘖闅忚瑕佹眰">
+ <el-input type="textarea" v-model="form.desc"></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>
+ <!-- 淇敼鍙戦�佹椂闂村璇濇 -->
+ <el-dialog
+ title="鍙戦�佹椂闂磋缃�"
+ :visible.sync="modificationVisible"
+ width="45%"
+ >
+ <div style="margin-bottom: 20px; color: red">
+ 缁熶竴淇敼褰撳ぉ鏈彂閫佺殑浠诲姟鏃堕棿
+ </div>
+
+ <el-form
+ :model="ruleForm"
+ :rules="rules"
+ ref="ruleForm"
+ label-width="120px"
+ class="demo-ruleForm"
+ >
+ <el-form-item label="鍙戦�佹棩鏈�">
+ <el-date-picker
+ v-model="ruleForm.value1"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ >
+ </el-date-picker>
+ </el-form-item>
+
+ <el-form-item label="鏃堕棿娈�" prop="type">
+ <el-checkbox-group v-model="ruleForm.type">
+ <el-checkbox label="涓婂崍" name="type"></el-checkbox>
+ <el-checkbox label="涓嬪崍" name="type"></el-checkbox>
+ <el-checkbox label="鏅氫笂" name="type"></el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ <el-form-item label="涓婂崍鏃堕棿鍖洪棿" required>
+ <el-time-picker
+ is-range
+ v-model="ruleForm.value2"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ placeholder="閫夋嫨鏃堕棿鑼冨洿"
+ >
+ </el-time-picker>
+ </el-form-item>
+ <el-form-item label="涓嬪崍鏃堕棿鍖洪棿" required>
+ <el-time-picker
+ is-range
+ v-model="ruleForm.value3"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ placeholder="閫夋嫨鏃堕棿鑼冨洿"
+ >
+ </el-time-picker>
+ </el-form-item>
+ <el-form-item label="鏅氫笂鏃堕棿鍖洪棿" required>
+ <el-time-picker
+ is-range
+ v-model="ruleForm.value4"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ placeholder="閫夋嫨鏃堕棿鑼冨洿"
+ >
+ </el-time-picker>
+ </el-form-item>
+ </el-form>
+
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="modificationVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="modificationVisible = false"
+ >纭� 瀹�</el-button
+ >
+ </span>
+ </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,
+ // 淇敼鍙戦�佹椂闂村璇濇
+ modificationVisible: false,
+ // 閮ㄩ棬鍚嶇О
+ deptName: undefined,
+ // 榛樿瀵嗙爜
+ initPassword: undefined,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ ruleForm: {
+ type: [],
+ },
+ dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
+ inputVisible: false,
+ inputValue: "",
+ previewVisible: false, //闂ㄨ瘖闅忚棰勮寮规
+ radio: "",
+ radios: [],
+ previewtype: 2, //棰勮闂ㄨ瘖闅忚绫诲瀷
+ total: 0, // 鎬绘潯鏁�
+ ImportQuantity: 999, //瀵奸棬璇婇殢璁挎暟閲�
+ //棰勮闂ㄨ瘖闅忚淇℃伅
+ previewvalue: {
+ username: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ value: [],
+ list: [],
+ loading: false,
+ states: [
+ "Alabama",
+ "Alaska",
+ "Arizona",
+ "Arkansas",
+ "California",
+ "Colorado",
+ "Connecticut",
+ "Delaware",
+ "Florida",
+ "Georgia",
+ "Hawaii",
+ "Idaho",
+ "Illinois",
+ "Indiana",
+ "Iowa",
+ "Kansas",
+ "Kentucky",
+ "Louisiana",
+ "Maine",
+ "Maryland",
+ "Massachusetts",
+ "Michigan",
+ "Minnesota",
+ "Mississippi",
+ "Missouri",
+ "Montana",
+ "Nebraska",
+ "Nevada",
+ "New Hampshire",
+ "New Jersey",
+ "New Mexico",
+ "New York",
+ "North Carolina",
+ "North Dakota",
+ "Ohio",
+ "Oklahoma",
+ "Oregon",
+ "Pennsylvania",
+ "Rhode Island",
+ "South Carolina",
+ "South Dakota",
+ "Tennessee",
+ "Texas",
+ "Utah",
+ "Vermont",
+ "Virginia",
+ "Washington",
+ "West Virginia",
+ "Wisconsin",
+ "Wyoming",
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: 1,
+ label: "寰呭鏍�",
+ },
+ {
+ value: 2,
+ label: "鎵ц涓�",
+ },
+ {
+ value: 3,
+ label: "鎵ц瀹屾垚",
+ },
+ {
+ value: 4,
+ 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;
+ });
+ },
+ // 鎼滅储
+ mounted() {
+ this.list = this.states.map((item) => {
+ return { value: `value:${item}`, label: `label:${item}` };
+ });
+ },
+ 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.previewVisible = true;
+ },
+ // 娣诲姞寮规鎼滅储
+ remoteMethod(query) {
+ if (query !== "") {
+ this.loading = true;
+ setTimeout(() => {
+ this.loading = false;
+ this.options = this.list.filter((item) => {
+ return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+ });
+ }, 200);
+ } else {
+ this.options = [];
+ }
+ },
+ // 闂ㄨ瘖闅忚鐘舵�佷慨鏀�
+ 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.addalteropen = true;
+ // getUser().then((response) => {
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.title = "鏂板闂ㄨ瘖闅忚";
+ // this.form.password = this.initPassword;
+ // });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ // handleUpdate(row) {
+ // this.reset();
+ // 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.title = "淇敼鐢ㄦ埛";
+ // 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(() => {});
+ },
+ // 鍏ㄩ儴鍋滄
+ AllStop() {
+ this.$modal
+ .confirm("鏄惁鍋滄鍏ㄩ儴浠诲姟锛�")
+ .then(function () {
+ return console.log("鍋滄鎴愬姛");
+ })
+ .then(() => {
+ this.getList();
+ this.$modal.msgWarning("鍋滄鎴愬姛");
+ })
+ .catch(() => {});
+ },
+ // 鍏ㄩ儴寮�濮�
+ AllStarted() {
+ this.$modal
+ .confirm("鏄惁寮�鍚叏閮ㄤ换鍔★紵")
+ .then(function () {
+ return console.log("寮�鍚垚鍔�");
+ })
+ .then(() => {
+ this.getList();
+ this.$modal.msgSuccess("寮�鍚垚鍔�");
+ })
+ .catch(() => {});
+ },
+ // 浠诲姟閲嶇疆
+ TaskReset() {
+ this.$modal
+ .confirm("鏄惁閲嶇疆閫変腑鐨勪换鍔¢」锛�")
+ .then(function () {
+ return console.log("閫変腑鎴愬姛");
+ })
+ .then(() => {
+ this.getList();
+ this.$modal.msgSuccess("閲嶇疆鎴愬姛");
+ })
+ .catch(() => {});
+ },
+ // 璁剧疆鍙戦�佹椂闂�
+ Sendtimesetting() {
+ this.modificationVisible = true;
+ },
+ // 璺宠浆璇︽儏椤�
+ Seedetails() {
+ this.$router.push({
+ path: "/followvisit/record/detailpage/",
+ query: { id: "1" },
+ });
+ },
+ // 瀵煎叆鎸夐挳
+ toleadExport() {},
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ 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;
+ }
+ }
+}
+.button-bb {
+ font-weight: 500;
+ background-color: #2ba05c;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+.button-xq {
+ font-weight: 500;
+ background-color: #409eff;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+.button-sc {
+ font-weight: 500;
+ background-color: #dd302a;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+.button-zx {
+ background: #4fabe9;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+
+// 閫夐」瀛椾綋鏀惧ぇ
+// ::v-deep.el-checkbox-group {
+// span {
+// font-size: 24px;
+// }
+// }
+</style>
diff --git a/src/views/followvisit/satisfaction/index.vue b/src/views/followvisit/satisfaction/index.vue
new file mode 100644
index 0000000..3b969de
--- /dev/null
+++ b/src/views/followvisit/satisfaction/index.vue
@@ -0,0 +1,897 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+
+ <el-form
+ :model="topqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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-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"
+ sortable
+ 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"
+ >
+ <template slot-scope="scope">
+ <span style="margin-left: 10px"
+ >{{ scope.row.date }}/{{ scope.row.data }}</span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎵ц鐘舵��"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <div>鎵ц瀹屾垚/鎵ц澶辫触</div>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="瀹℃牳浜�"
+ align="center"
+ key="topicnumberaa"
+ prop="topicnumberaa"
+ sortable
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="瀹℃牳鏃堕棿"
+ sortable
+ 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="120"
+ 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-zx"
+ ><i class="el-icon-s-promotion"></i>寮�濮嬫墽琛�</span
+ ></el-button
+ >
+ </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-xq"
+ ><i class="el-icon-s-data"></i>璇︽儏</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-bb"
+ ><i class="el-icon-s-order"></i>鎶ヨ〃</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-sc"
+ ><i class="el-icon-delete"></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-row>
+ <!-- 娣诲姞鎴栦慨鏀归棬璇婇殢璁垮璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="addalteropen"
+ width="700px"
+ append-to-body
+ >
+ <el-form ref="form" :model="form" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12"
+ ><el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="form.name"></el-input> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="鎵�灞炵瀹�">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item></el-col
+ ></el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="闅忚绫诲瀷">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鏈嶅姟妯″潡">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="闂ㄨ瘖闅忚瑕佹眰">
+ <el-input type="textarea" v-model="form.desc"></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: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ value: [],
+ list: [],
+ loading: false,
+ states: [
+ "Alabama",
+ "Alaska",
+ "Arizona",
+ "Arkansas",
+ "California",
+ "Colorado",
+ "Connecticut",
+ "Delaware",
+ "Florida",
+ "Georgia",
+ "Hawaii",
+ "Idaho",
+ "Illinois",
+ "Indiana",
+ "Iowa",
+ "Kansas",
+ "Kentucky",
+ "Louisiana",
+ "Maine",
+ "Maryland",
+ "Massachusetts",
+ "Michigan",
+ "Minnesota",
+ "Mississippi",
+ "Missouri",
+ "Montana",
+ "Nebraska",
+ "Nevada",
+ "New Hampshire",
+ "New Jersey",
+ "New Mexico",
+ "New York",
+ "North Carolina",
+ "North Dakota",
+ "Ohio",
+ "Oklahoma",
+ "Oregon",
+ "Pennsylvania",
+ "Rhode Island",
+ "South Carolina",
+ "South Dakota",
+ "Tennessee",
+ "Texas",
+ "Utah",
+ "Vermont",
+ "Virginia",
+ "Washington",
+ "West Virginia",
+ "Wisconsin",
+ "Wyoming",
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: 1,
+ label: "寰呭鏍�",
+ },
+ {
+ value: 2,
+ label: "鎵ц涓�",
+ },
+ {
+ value: 3,
+ label: "鎵ц瀹屾垚",
+ },
+ {
+ value: 4,
+ 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;
+ });
+ },
+ // 鎼滅储
+ mounted() {
+ this.list = this.states.map((item) => {
+ return { value: `value:${item}`, label: `label:${item}` };
+ });
+ },
+ 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.previewVisible = true;
+ },
+ // 娣诲姞寮规鎼滅储
+ remoteMethod(query) {
+ if (query !== "") {
+ this.loading = true;
+ setTimeout(() => {
+ this.loading = false;
+ this.options = this.list.filter((item) => {
+ return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+ });
+ }, 200);
+ } else {
+ this.options = [];
+ }
+ },
+ // 闂ㄨ瘖闅忚鐘舵�佷慨鏀�
+ 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.addalteropen = true;
+ // getUser().then((response) => {
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.title = "鏂板闂ㄨ瘖闅忚";
+ // this.form.password = this.initPassword;
+ // });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ 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.title = "淇敼鐢ㄦ埛";
+ 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;
+ }
+ }
+}
+.button-bb {
+ font-weight: 500;
+ color: #2ba05c;
+}
+.button-xq {
+ font-weight: 500;
+ color: #409eff;
+}
+.button-sc {
+ font-weight: 500;
+ color: #dd302a;
+}
+.button-zx {
+ background: #4fabe9;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/views/followvisit/tasklist/index.vue b/src/views/followvisit/tasklist/index.vue
new file mode 100644
index 0000000..3b969de
--- /dev/null
+++ b/src/views/followvisit/tasklist/index.vue
@@ -0,0 +1,897 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="20">
+ <!--鐢ㄦ埛鏁版嵁-->
+
+ <el-form
+ :model="topqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
+ <el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="topqueryParams.name"></el-input>
+ </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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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="topqueryParams.topic" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in topicoptions"
+ :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-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"
+ sortable
+ 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"
+ >
+ <template slot-scope="scope">
+ <span style="margin-left: 10px"
+ >{{ scope.row.date }}/{{ scope.row.data }}</span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎵ц鐘舵��"
+ align="center"
+ key="topicnumber"
+ prop="topicnumber"
+ width="120"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <div>鎵ц瀹屾垚/鎵ц澶辫触</div>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="瀹℃牳浜�"
+ align="center"
+ key="topicnumberaa"
+ prop="topicnumberaa"
+ sortable
+ width="120"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="瀹℃牳鏃堕棿"
+ sortable
+ 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="120"
+ 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-zx"
+ ><i class="el-icon-s-promotion"></i>寮�濮嬫墽琛�</span
+ ></el-button
+ >
+ </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-xq"
+ ><i class="el-icon-s-data"></i>璇︽儏</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-bb"
+ ><i class="el-icon-s-order"></i>鎶ヨ〃</span
+ ></el-button
+ >
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ v-hasPermi="['system:user:edit']"
+ ><span class="button-sc"
+ ><i class="el-icon-delete"></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-row>
+ <!-- 娣诲姞鎴栦慨鏀归棬璇婇殢璁垮璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="addalteropen"
+ width="700px"
+ append-to-body
+ >
+ <el-form ref="form" :model="form" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12"
+ ><el-form-item label="浠诲姟鍚嶇О">
+ <el-input v-model="form.name"></el-input> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="鎵�灞炵瀹�">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item></el-col
+ ></el-row>
+ <el-row :gutter="20">
+ <el-col :span="24"
+ ><el-form-item label="闅忚绫诲瀷">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select> </el-form-item
+ ></el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鏈嶅姟妯″潡">
+ <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
+ <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+ <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="闂ㄨ瘖闅忚瑕佹眰">
+ <el-input type="textarea" v-model="form.desc"></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: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+ },
+ value: [],
+ list: [],
+ loading: false,
+ states: [
+ "Alabama",
+ "Alaska",
+ "Arizona",
+ "Arkansas",
+ "California",
+ "Colorado",
+ "Connecticut",
+ "Delaware",
+ "Florida",
+ "Georgia",
+ "Hawaii",
+ "Idaho",
+ "Illinois",
+ "Indiana",
+ "Iowa",
+ "Kansas",
+ "Kentucky",
+ "Louisiana",
+ "Maine",
+ "Maryland",
+ "Massachusetts",
+ "Michigan",
+ "Minnesota",
+ "Mississippi",
+ "Missouri",
+ "Montana",
+ "Nebraska",
+ "Nevada",
+ "New Hampshire",
+ "New Jersey",
+ "New Mexico",
+ "New York",
+ "North Carolina",
+ "North Dakota",
+ "Ohio",
+ "Oklahoma",
+ "Oregon",
+ "Pennsylvania",
+ "Rhode Island",
+ "South Carolina",
+ "South Dakota",
+ "Tennessee",
+ "Texas",
+ "Utah",
+ "Vermont",
+ "Virginia",
+ "Washington",
+ "West Virginia",
+ "Wisconsin",
+ "Wyoming",
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 琛ㄥ崟鍙傛暟
+ form: {
+ phonenumber: "",
+ totagid: "",
+ types: "",
+ nickName: "",
+ qystatus: "",
+ btstatus: "",
+ },
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ userName: undefined,
+ tagid: undefined,
+ topic: undefined,
+ },
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: 1,
+ label: "寰呭鏍�",
+ },
+ {
+ value: 2,
+ label: "鎵ц涓�",
+ },
+ {
+ value: 3,
+ label: "鎵ц瀹屾垚",
+ },
+ {
+ value: 4,
+ 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;
+ });
+ },
+ // 鎼滅储
+ mounted() {
+ this.list = this.states.map((item) => {
+ return { value: `value:${item}`, label: `label:${item}` };
+ });
+ },
+ 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.previewVisible = true;
+ },
+ // 娣诲姞寮规鎼滅储
+ remoteMethod(query) {
+ if (query !== "") {
+ this.loading = true;
+ setTimeout(() => {
+ this.loading = false;
+ this.options = this.list.filter((item) => {
+ return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+ });
+ }, 200);
+ } else {
+ this.options = [];
+ }
+ },
+ // 闂ㄨ瘖闅忚鐘舵�佷慨鏀�
+ 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.addalteropen = true;
+ // getUser().then((response) => {
+ // this.postOptions = response.posts;
+ // this.roleOptions = response.roles;
+ // this.title = "鏂板闂ㄨ瘖闅忚";
+ // this.form.password = this.initPassword;
+ // });
+ },
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.reset();
+ 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.title = "淇敼鐢ㄦ埛";
+ 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;
+ }
+ }
+}
+.button-bb {
+ font-weight: 500;
+ color: #2ba05c;
+}
+.button-xq {
+ font-weight: 500;
+ color: #409eff;
+}
+.button-sc {
+ font-weight: 500;
+ color: #dd302a;
+}
+.button-zx {
+ background: #4fabe9;
+ padding: 5px;
+ border-radius: 1px;
+ color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/views/login.vue b/src/views/login.vue
index 6402807..f595938 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -36,7 +36,7 @@
/>
</el-input>
</el-form-item>
- <el-form-item prop="code" v-if="captchaEnabled">
+ <!-- <el-form-item prop="code" v-if="captchaEnabled">
<el-input
v-model="loginForm.code"
auto-complete="off"
@@ -53,7 +53,7 @@
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img" />
</div>
- </el-form-item>
+ </el-form-item> -->
<el-checkbox
v-model="loginForm.rememberMe"
style="margin: 0px 0px 25px 0px"
@@ -108,7 +108,7 @@
password: [
{ required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勫瘑鐮�" },
],
- code: [{ required: true, trigger: "change", message: "璇疯緭鍏ラ獙璇佺爜" }],
+ // code: [{ required: true, trigger: "change", message: "璇疯緭鍏ラ獙璇佺爜" }],
},
loading: false,
// 楠岃瘉鐮佸紑鍏�
@@ -133,6 +133,7 @@
methods: {
getCode() {
getCodeImg().then((res) => {
+ console.log(res);
this.captchaEnabled =
res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (this.captchaEnabled) {
diff --git a/src/views/patient/follow/index.vue b/src/views/patient/follow/index.vue
new file mode 100644
index 0000000..289990c
--- /dev/null
+++ b/src/views/patient/follow/index.vue
@@ -0,0 +1,17 @@
+<template>
+ <div>鎮h�呭洖璁�</div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {};
+ },
+
+ created() {},
+
+ methods: {},
+};
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/views/patient/physical/index.vue b/src/views/patient/physical/index.vue
new file mode 100644
index 0000000..80e4c31
--- /dev/null
+++ b/src/views/patient/physical/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/patient/propaganda/index.vue b/src/views/patient/propaganda/index.vue
new file mode 100644
index 0000000..54b99d1
--- /dev/null
+++ b/src/views/patient/propaganda/index.vue
@@ -0,0 +1,17 @@
+<template>
+ <div>瀹f暀鏈嶅姟</div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {};
+ },
+
+ created() {},
+
+ methods: {},
+};
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/views/patient/questionnaire/index.vue b/src/views/patient/questionnaire/index.vue
new file mode 100644
index 0000000..5e70d58
--- /dev/null
+++ b/src/views/patient/questionnaire/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/patient/review/index.vue b/src/views/patient/review/index.vue
new file mode 100644
index 0000000..7f55ecf
--- /dev/null
+++ b/src/views/patient/review/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/patient/servefn/index.vue b/src/views/patient/servefn/index.vue
new file mode 100644
index 0000000..92b4835
--- /dev/null
+++ b/src/views/patient/servefn/index.vue
@@ -0,0 +1,27 @@
+<template>
+ <div>
+鎮h�呮湇鍔�
+ </div>
+</template>
+
+<script>
+export default {
+ data () {
+ return {
+
+ }
+ },
+
+ created () {
+
+ },
+
+ methods: {
+
+ }
+}
+</script>
+
+<style lang='scss' scoped>
+
+</style>
diff --git a/src/views/patient/subsequent/index.vue b/src/views/patient/subsequent/index.vue
new file mode 100644
index 0000000..80297ee
--- /dev/null
+++ b/src/views/patient/subsequent/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/sfstatistics/Voicedetail/index.vue b/src/views/sfstatistics/Voicedetail/index.vue
new file mode 100644
index 0000000..0ffbe56
--- /dev/null
+++ b/src/views/sfstatistics/Voicedetail/index.vue
@@ -0,0 +1,379 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="leftvlue-top">
+ <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
+ <el-tab-pane name="Local">
+ <span class="mulsz" slot="label">澶嶆煡缁熻 </span>
+ </el-tab-pane>
+ <el-tab-pane name="sharing">
+ <span class="mulsz" slot="label">澶嶈瘖缁熻 </span>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ <div class="viewbox">
+ <div class="title-bot">
+ <el-form
+ :model="queryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ label-width="98px"
+ >
+ <el-form-item prop="userName">
+ <el-select
+ v-model="queryParams.value1"
+ placeholder="榛樿鎸夋湀浠芥殏鏃�"
+ >
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎶曡瘔鎻愪氦鏃堕棿">
+ <el-date-picker
+ v-model="queryParams.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="userName">
+ <el-select v-model="queryParams.value2" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in ksoptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="绠$悊鏂规锛�" prop="userName">
+ <el-select v-model="queryParams.value3" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in gloptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ </div>
+ <div class="viewhez">
+ <div
+ id="fucazCharts"
+ class="sontwoactiveNamecaz"
+ style="width: 800px; height: 800px"
+ ></div>
+ <div
+ id="fucabCharts"
+ class="sontwoactiveNamecab"
+ style="width: 1300px; height: 800px"
+ ></div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import Treeselect from "@riophae/vue-treeselect";
+import * as echarts from "echarts";
+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", //椤堕儴閫夋嫨
+ fucazCharts: {},
+ fucabCharts: {},
+ queryParams: {},
+ options: [
+ {
+ value: 1,
+ label: "鎸夋湀浠�",
+ },
+ {
+ value: 2,
+ label: "鎸夊搴�",
+ },
+ {
+ value: 3,
+ label: "鎸夊勾",
+ },
+ ],
+ ksoptions: [
+ {
+ value: 1,
+ label: "楠ㄧ",
+ },
+ {
+ value: 2,
+ label: "蹇冭剰绉�",
+ },
+ {
+ value: 3,
+ label: "鍐呭垎娉岀",
+ },
+ ],
+ gloptions: [
+ {
+ value: 4,
+ label: "涓�鍙�",
+ },
+ {
+ value: 2,
+ label: "浜屽彿",
+ },
+ {
+ value: 3,
+ label: "涓夊彿",
+ },
+ {
+ value: 1,
+ label: "鏃�",
+ },
+ ],
+ };
+ },
+ watch: {},
+ created() {},
+ mounted() {
+ this.fucazCharts = document.getElementById("fucazCharts");
+ this.fucabCharts = document.getElementById("fucabCharts");
+
+ console.log(this.fucazCharts);
+ console.log(this.fucabCharts);
+
+ this.fucazChartsInit();
+ this.fucabChartsInit();
+ },
+
+ methods: {
+ // 楗煎浘
+ fucazChartsInit() {
+ var fucazCharts = echarts.init(this.fucazCharts);
+ console.log(fucazCharts);
+ var option = {
+ tooltip: {
+ trigger: "item",
+ },
+ legend: {
+ top: "5%",
+ left: "center",
+ },
+ series: [
+ {
+ name: "鍘熷洜褰掑睘",
+ type: "pie",
+ radius: ["40%", "70%"],
+ avoidLabelOverlap: false,
+ itemStyle: {
+ borderRadius: 10,
+ borderColor: "#fff",
+ borderWidth: 2,
+ },
+ label: {
+ show: false,
+ formatter(param) {
+ // correct the percentage
+ return param.name + " (" + param.percent * 2 + "%)";
+ },
+ position: "center",
+ },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: 40,
+ fontWeight: "bold",
+ },
+ },
+ labelLine: {
+ show: false,
+ },
+ data: [
+ { value: 1048, name: "涓嶉渶瑕佸璇�" },
+ { value: 735, name: "娌℃湁鎰忎箟" },
+ { value: 580, name: "涓嶇煡閬撴椂闂�" },
+ { value: 484, name: "缁忔祹鍘熷洜" },
+ { value: 300, name: "蹇樿澶嶈瘖" },
+ { value: 200, name: "涓嶆柟渚挎潵闄㈠璇�" },
+ { value: 200, name: "鍏朵粬鍖婚櫌澶嶈瘖" },
+ { value: 100, name: "鍏朵粬" },
+ ],
+ },
+ ],
+ };
+ // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆�
+ fucazCharts.setOption(option);
+ },
+ fucabChartsInit() {
+ var fucabCharts = echarts.init(this.fucabCharts);
+ console.log(fucabCharts);
+ var option = {
+ tooltip: {
+ trigger: "axis",
+ axisPointer: {
+ type: "cross",
+ crossStyle: {
+ color: "#999",
+ },
+ },
+ },
+ toolbox: {
+ feature: {
+ dataView: { show: true, readOnly: false },
+ magicType: { show: true, type: ["line", "bar"] },
+ restore: { show: true },
+ saveAsImage: { show: true },
+ },
+ },
+ legend: {
+ data: ["鏈璇婃暟", "鍙婃椂澶嶈瘖鏁�", "鍙婃椂澶嶈瘖鐜�"],
+ },
+ xAxis: [
+ {
+ type: "category",
+ data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
+ axisPointer: {
+ type: "shadow",
+ },
+ },
+ ],
+ yAxis: [
+ {
+ type: "value",
+ name: "浜烘暟",
+ min: 0,
+ max: 250,
+ interval: 50,
+ axisLabel: {
+ formatter: "{value} ",
+ },
+ },
+ {
+ type: "value",
+ name: "鐧惧垎姣�",
+ min: 0,
+ max: 25,
+ interval: 5,
+ axisLabel: {
+ formatter: "{value} %",
+ },
+ },
+ ],
+ series: [
+ {
+ name: "鏈璇婃暟",
+ type: "bar",
+ tooltip: {
+ valueFormatter: function (value) {
+ return value + " ";
+ },
+ },
+ data: [
+ 47.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4,
+ 3.3,
+ ],
+ },
+ {
+ name: "鍙婃椂澶嶈瘖鏁�",
+ type: "bar",
+ tooltip: {
+ valueFormatter: function (value) {
+ return value + " ";
+ },
+ },
+ data: [
+ 66.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0,
+ 2.3,
+ ],
+ },
+ {
+ name: "鍙婃椂澶嶈瘖鐜�",
+ type: "line",
+ yAxisIndex: 1,
+ tooltip: {
+ valueFormatter: function (value) {
+ return value + " %";
+ },
+ },
+ data: [
+ 7.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2,
+ ],
+ },
+ ],
+ };
+ // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆�
+ fucabCharts.setOption(option);
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.Questionnairemanagement {
+}
+
+::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;
+ text-align: left;
+ font-size: 20px;
+}
+
+.leftvlue {
+ // display: flex;
+ // flex: 1;
+ 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;
+ }
+}
+.viewbox {
+ 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);
+ // height: 300px;
+ margin-top: 20px;
+ .title-bot {
+ padding: 20px;
+ }
+}
+.viewhez {
+ display: flex;
+ overflow: hidden;
+}
+</style>
diff --git a/src/views/sfstatistics/analyse/index.vue b/src/views/sfstatistics/analyse/index.vue
new file mode 100644
index 0000000..2313919
--- /dev/null
+++ b/src/views/sfstatistics/analyse/index.vue
@@ -0,0 +1,107 @@
+<template>
+ <div class="indexanalysis">
+ <div class="analysis-top">
+ <div class="title-top">鏌ヨ鏉′欢</div>
+ <div class="value">
+ <el-form ref="form" :model="form" label-width="120px">
+ <el-form-item label="閫夋嫨鎸囨爣绫诲瀷">
+ <el-select v-model="value" filterable placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ </div>
+ </div>
+ <div class="formindex">
+ <el-table :data="tableData" border style="width: 100%">
+ <el-table-column prop="date" label="鎸囨爣绫诲瀷"> </el-table-column>
+ <el-table-column prop="name" label="鎸囨爣鍚嶇О"> </el-table-column>
+ <el-table-column prop="address" label="鍑虹幇娆℃暟"> </el-table-column>
+ <el-table-column prop="times" label="鎸囨爣绫诲瀷鍑虹幇娆℃暟">
+ </el-table-column>
+ <el-table-column prop="proportion" label="鍗犳瘮"> </el-table-column>
+ </el-table>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "indexanalysis",
+ data() {
+ return {
+ options: [
+ {
+ value: "閫夐」1",
+ label: "鍙戠儹鏈夋棤",
+ },
+ {
+ value: "閫夐」2",
+ label: "鍜冲椊鏈夋棤",
+ },
+ {
+ value: "閫夐」3",
+ label: "鏈嶈嵂鍚庝笉鑹弽搴�",
+ },
+ ],
+ tableData: [
+ {
+ date: "鍙戠儹鏈夋棤",
+ name: "鏈�",
+ address: 1,
+ times: 2,
+ proportion: "50%",
+ },
+ {
+ date: "鍙戠儹鏈夋棤",
+ name: "鏃�",
+ address: 1,
+ times: 2,
+ proportion: "50%",
+ },
+ {
+ date: "鍙戠儹鏈夋棤",
+ name: "鍏朵粬",
+ address: 0,
+ times: 2,
+ proportion: "0%",
+ },
+ ],
+ };
+ },
+
+ created() {},
+
+ methods: {},
+};
+</script>
+
+<style lang="scss" scoped>
+.analysis-top {
+ 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);
+ margin: 15px;
+ .title-top {
+ background-color: #00bbd3;
+ color: #fff;
+ padding: 10px 20px;
+ font-size: 20px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ }
+}
+.formindex {
+ margin: 0 15px;
+ 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);
+ padding: 20px;
+}
+</style>
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
new file mode 100644
index 0000000..14a3057
--- /dev/null
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -0,0 +1,884 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn">
+ <div class="sidecolumn-top">
+ <div class="top-wj">鎮h�呮潵婧�</div>
+ </div>
+
+ <div class="bottom-fl">
+ <el-tabs
+ tab-position="right"
+ v-model="activeName"
+ @tab-click="handleClick"
+ >
+ <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane>
+ <el-tab-pane label="浣忛櫌" name="bhospitalized"></el-tab-pane>
+ <el-tab-pane label="鍦ㄩ櫌" name="Inhospital"></el-tab-pane>
+ <el-tab-pane label="闂ㄨ瘖" name="outpatient"></el-tab-pane>
+ <el-tab-pane label="浣撴" name="physical"></el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="leftvlue-top">
+ <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
+ <el-tab-pane name="Local">
+ <span class="mulsz" slot="label">鎸夊嚭闄㈢梾鍖虹粺璁� </span>
+ </el-tab-pane>
+ <el-tab-pane name="sharing">
+ <span class="mulsz" slot="label">鎸夊嚭闄㈢瀹ょ粺璁� </span>
+ </el-tab-pane>
+ </el-tabs>
+ </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-select v-model="queryParams.value1" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑洪櫌鐥呭尯" prop="userName">
+ <el-select v-model="queryParams.value2" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="绠$悊鏂规" prop="userName">
+ <el-select v-model="queryParams.value3" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑洪櫌鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime1"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptionsa"
+ >
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璁″垝闅忚鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime2"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptions"
+ >
+ </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-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="medium"
+ @click="addladeltag"
+ 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">
+ <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"
+ :border="true"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column
+ fixed
+ label="搴忓彿"
+ align="center"
+ key="tagid"
+ prop="tagid"
+ width="50"
+ />
+ <el-table-column
+ fixed
+ label="鍑洪櫌鐥呭尯"
+ align="center"
+ key="tagname"
+ prop="tagname"
+ width="100"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="搴旈殢璁挎暟"
+ align="center"
+ key="updateTime"
+ prop="updateTime"
+ >
+ <template slot-scope="scope">
+ <span
+ >{{ scope.row.updateBy }}
+ <p>{{ scope.row.updateTime }}</p></span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚瀹屾垚鐜�"
+ align="center"
+ key="isupload"
+ prop="isupload"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI澶栧懠娆℃暟"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊鍙戦�佹鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊鍙戦�佹鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚娆℃暟"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="澶辫鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="澶辫鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="澶辫鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寮傚父鎬绘暟"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鎬诲紓甯哥巼"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鍥炲寮傚父鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鍥炲寮傚父鍙婃椂澶勭悊鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鍥炲寮傚父鍙婃椂澶勭悊鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ >
+ </el-table-column>
+
+ <!-- <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="300"
+ 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"></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"></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>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import {
+ toamendtag,
+ addapitag,
+ detailstag,
+ deletetag,
+ changetagcategory,
+ toamendtagcategory,
+ addtagcategory,
+ deletetagcategory,
+ listtag,
+ tagclassifylist,
+} from "@/api/system/label";
+
+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", //椤堕儴閫夋嫨
+ activeName: "first", //渚ц竟閫夋嫨
+ // 閬僵灞�
+ loading: false,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ idds: "", //鍒嗙被id
+ // 鎬绘潯鏁�
+ total: 0,
+ amendtag: false, //鏄惁淇敼绫诲埆
+ lstamendtag: false, //鏄惁淇敼鏍囩
+ scavisible: false, //鍒犻櫎寮规
+ deleteVisible: false, //鍒嗙被鍒犻櫎寮规
+ deletefenl: "楂樿鍘�", //鍒犻櫎椤�
+ //淇敼娣诲姞鏍囩寮规鏁版嵁
+ tagform: {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ },
+ classifyform: {
+ categoryname: "",
+ },
+ // 鏍囩琛ㄦ牸鏁版嵁
+ userList: [],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず寮瑰嚭灞�
+ open: false,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ // 瑙掕壊閫夐」
+ roleOptions: [],
+ // 琛ㄥ崟鍙傛暟
+ form: {},
+ forms: {
+ name: "",
+ },
+ numberlb: 22,
+ dialogFormVisible: false, //娣诲姞銆佷慨鏀圭被鍒脊妗�
+ lstamendtagVisible: false, //娣诲姞銆佷慨鏀规爣绛惧脊妗�
+ goQRCodeVisible: false, //浜岀淮鐮佸脊妗�
+ sidecolumnval: "", //绫诲埆鎼滅储
+ propss: { multiple: true },
+ topqueryParams: {}, //瀵煎嚭绛涢�夋潯浠�
+ options: [
+ {
+ value: 1,
+ label: "涓滃崡",
+ },
+ {
+ value: 2,
+ label: "瑗垮寳",
+ },
+ {
+ value: 3,
+ label: "浠ㄤ花浠�",
+ },
+ {
+ value: 4,
+ label: "鍏椋掗",
+ },
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() < Date.now() - 3600 * 1000 * 24;
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ pickerOptionsa: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 鏌ヨ鏍囩鍒楄〃鍙傛暟
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ tagname: undefined,
+ tagdescription: undefined,
+ },
+ // 鍒椾俊鎭�
+ columns: [
+ { key: 0, label: `鏍囩缂栧彿`, visible: true },
+ { key: 1, label: `鏍囩鍚嶇О`, visible: true },
+ { key: 2, label: `鏍囩鏄电О`, visible: true },
+ { key: 3, label: `閮ㄩ棬`, visible: true },
+ { key: 4, label: `鎵嬫満鍙风爜`, visible: true },
+ { key: 5, label: `鐘舵�乣, visible: true },
+ { key: 6, label: `鍒涘缓鏃堕棿`, visible: 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();
+ this.gitclasify();
+ },
+
+ methods: {
+ /** 鏌ヨ鏍囩鍒楄〃 */
+ getList() {
+ listtag(this.addDateRange(this.queryParams)).then((response) => {
+ console.log(response);
+ this.total = response.total;
+ this.userList = response.rows;
+ });
+ },
+ /** 淇敼鏍囩 */
+ handleUpdate(row) {
+ console.log(row, "淇敼鏍囩");
+ this.lstamendtagVisible = true;
+ this.lstamendtag = true;
+ this.tagform = {
+ isupload: row.isupload,
+ tagname: row.tagname,
+ tagcategoryid: row.tagcategoryid,
+ tagdescription: row.tagdescription,
+ tagid: row.tagid,
+ };
+ },
+ addladeltag() {
+ this.lstamendtagVisible = true;
+ this.lstamendtag = false;
+ this.tagform = {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ tagid: "",
+ };
+ },
+ // 娣诲姞/淇敼鏍囩
+ Maintenancetag() {
+ if (this.lstamendtag) {
+ toamendtag(this.addDateRange(this.tagform)).then((response) => {
+ console.log(response);
+ this.getList();
+ });
+ } else {
+ addapitag(this.addDateRange(this.tagform)).then((response) => {
+ console.log(response);
+ this.getList();
+ });
+ }
+ this.tagform = {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ tagid: "",
+ };
+ },
+
+ // 琛ㄥ崟閲嶇疆
+ 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");
+ },
+ // 鏍囩鐘舵�佷慨鏀�
+ handleStatusChange(row) {
+ console.log(row.isupload);
+ let text = row.isupload === "0" ? "鍚敤" : "鍋滅敤";
+ this.$modal
+ .confirm('纭瑕�"' + text + '""' + row.tagname + '"鏍囩鍚楋紵')
+ .then(function () {
+ return changetagcategory(row.tagid, row.isupload);
+ })
+ .then(() => {
+ this.$modal.msgSuccess(text + "鎴愬姛");
+ })
+ .catch(function () {
+ row.isupload = row.isupload === "0" ? "1" : "0";
+ });
+ },
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ handleQuery() {
+ this.queryParams.pageNum = 1;
+ this.getList();
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.resetForm("queryForm");
+ this.queryParams.tagname = "";
+ this.$refs.tree.setCurrentKey(null);
+ this.handleQuery();
+ },
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.tagid);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ },
+
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+ handleDelete(row) {
+ console.log(row, "鍒犻櫎寮圭獥");
+ const tagids = row.tagid || this.ids;
+ console.log(tagids);
+ const tagname = row.tagname;
+ this.$modal
+ .confirm(
+ tagname
+ ? '鏄惁纭鍒犻櫎鏍囩鍚嶇О涓�"' + tagname + '"鐨勬暟鎹」锛�'
+ : "鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�"
+ )
+ .then(function () {
+ return deletetag(tagids);
+ })
+ .then(() => {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ })
+ .catch(() => {});
+ },
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ this.download(
+ "base/tag/export",
+ {
+ ...this.topqueryParams,
+ },
+ `user_${new Date().getTime()}.xlsx`
+ );
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.Questionnairemanagement {
+ display: flex;
+}
+.sidecolumn {
+ width: 180px;
+ 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;
+ }
+}
+::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;
+ text-align: left;
+ 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;
+ }
+}
+.document {
+ width: 100px;
+ height: 50px;
+}
+.documentf {
+ display: flex;
+ justify-content: flex-end;
+}
+.button-text {
+ color: rgb(70, 204, 238);
+}
+.button-textck {
+ 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/sfstatistics/propaganda/index.vue b/src/views/sfstatistics/propaganda/index.vue
new file mode 100644
index 0000000..6d5b549
--- /dev/null
+++ b/src/views/sfstatistics/propaganda/index.vue
@@ -0,0 +1,951 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn">
+ <div class="sidecolumn-top">
+ <div class="top-wj">鎮h�呮潵婧�</div>
+ </div>
+
+ <div class="bottom-fl">
+ <el-tabs
+ tab-position="right"
+ v-model="activeName"
+ @tab-click="handleClick"
+ >
+ <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane>
+ <el-tab-pane label="浣忛櫌" name="bhospitalized"></el-tab-pane>
+ <el-tab-pane label="鍦ㄩ櫌" name="Inhospital"></el-tab-pane>
+ <el-tab-pane label="闂ㄨ瘖" name="outpatient"></el-tab-pane>
+ <el-tab-pane label="浣撴" name="physical"></el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="leftvlue-top">
+ <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
+ <el-tab-pane name="Local">
+ <span class="mulsz" slot="label">鎸夊嚭闄㈢梾鍖虹粺璁� </span>
+ </el-tab-pane>
+ <el-tab-pane name="sharing">
+ <span class="mulsz" slot="label">鎸夊嚭闄㈢瀹ょ粺璁� </span>
+ </el-tab-pane>
+ </el-tabs>
+ </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-select
+ v-model="queryParams.value1"
+ placeholder="榛樿鏄璐﹀彿鎵�灞炲尰闄�"
+ >
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑洪櫌鐥呭尯" prop="userName">
+ <el-select v-model="queryParams.value2" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="绠$悊鏂规" prop="userName">
+ <el-select v-model="queryParams.value3" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑洪櫌鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime1"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptionsa"
+ >
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璁″垝鎵ц鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime2"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptions"
+ >
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="瀹為檯瀹屾垚鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime2"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptions"
+ >
+ </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-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="medium"
+ @click="addladeltag"
+ 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">
+ <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"
+ :border="true"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column
+ fixed
+ label="搴忓彿"
+ align="center"
+ key="tagid"
+ prop="tagid"
+ width="50"
+ />
+ <el-table-column
+ fixed
+ label="鍑洪櫌鐥呭尯"
+ align="center"
+ key="tagname"
+ prop="tagname"
+ width="100"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="瀹f暀"
+ align="center"
+ key="updateTime"
+ prop="updateTime"
+ >
+ </el-table-column>
+
+ <el-table-column
+ label="瀹f暀鏇存柊鏃ユ湡"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="110"
+ >
+ </el-table-column>
+ <el-table-column
+ label="绠$悊鏂规"
+ align="center"
+ key="isupload"
+ prop="isupload"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚浠诲姟鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚瀹屾垚鐜�"
+ align="center"
+ key="isupload"
+ prop="isupload"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI澶栧懠娆℃暟"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊鍙戦�佹鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊鍙戦�佹鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚娆℃暟"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="300"
+ 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-s-data"></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-share"></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>
+ </div>
+ </div>
+ <!-- 鍗曢灞曠ず寮规 -->
+ <el-dialog :visible.sync="topicVisible" width="45%">
+ <div class="topicdia">
+ <div class="top-text">{{ topicvalue.name }}</div>
+ <div class="top-mintext">闅忚瀹屾垚鏁皗{ topicvalue.number }}</div>
+ <div style="overflow-x: hidden; overflow-y: auto; max-height: 65vh">
+ <div class="ttaabbcc" v-for="item in topiclist" :key="item.name">
+ <div class="describe">
+ 绗瑊{ item.number }}棰橈細 {{ item.name }}?<span
+ >[{{ item.type == 1 ? "鍗曢�夐" : "澶氶�夐" }}]</span
+ >
+ </div>
+ <div>
+ <el-table :data="tableData" style="width: 100%">
+ <el-table-column prop="date" label="闂閫夐」">
+ </el-table-column>
+ <el-table-column prop="name" label="閫夋嫨浜烘暟">
+ </el-table-column>
+ <el-table-column prop="address" label="姣斾緥"> </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="topicVisible = false">鍏� 闂�</el-button>
+ </span>
+ </el-dialog>
+ <!-- 缁撴灉缁熻寮规 -->
+ <el-dialog title="鎻愮ず" :visible.sync="consequenceVisible" width="50%">
+ <div class="topicdia">
+ <div class="top-text" style="margin-bottom: 20px">瀹f暀缁熻缁撴灉</div>
+ <div>
+ <el-table :data="tableData" style="width: 100%">
+ <el-table-column prop="date" label="鎮h�呭鍚�"> </el-table-column>
+ <el-table-column prop="namea" label="鎬у埆"> </el-table-column>
+ <el-table-column prop="namec" label="骞撮緞"> </el-table-column>
+ <el-table-column prop="named" label="鑱旂郴鏂瑰紡"> </el-table-column>
+ <el-table-column prop="namee" label="璁″垝鎵ц鏃堕棿" width="120">
+ </el-table-column>
+ <el-table-column prop="namex" label="瀹為檯瀹屾垚鏃堕棿" width="120">
+ </el-table-column>
+ <el-table-column prop="namez" label="瀹屾垚鏂瑰紡"> </el-table-column>
+ <el-table-column prop="nameh" label="瀹f暀"> </el-table-column>
+ <el-table-column prop="namej" label="寰楀垎"> </el-table-column>
+ <!-- 鎴彇鍑犲垪閫夐」灞炴�у悕缁存姢鏁扮粍閬嶅巻 -->
+ <!-- <el-table-column prop="namet">
+ <template slot="header" slot-scope="scope">
+ <div>{{ scope.row.name }}<span>[鍗曢�夐]</span></div>
+ </template>
+ </el-table-column> -->
+ </el-table>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="consequenceVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="consequenceVisible = false"
+ >纭� 瀹�</el-button
+ >
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ toamendtag,
+ addapitag,
+ deletetag,
+ changetagcategory,
+ listtag,
+} from "@/api/system/label";
+
+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", //椤堕儴閫夋嫨
+ activeName: "first",
+ // 閬僵灞�
+ loading: false,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ idds: "", //鍒嗙被id
+ // 鎬绘潯鏁�
+ total: 0,
+ lstamendtag: false, //鏄惁淇敼鏍囩
+ topicVisible: false, //鎺у埗鍗曢寮规
+ consequenceVisible: false, //鎺у埗缁撴灉寮规
+ //淇敼娣诲姞鏍囩寮规鏁版嵁
+ tagform: {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ },
+ topicvalue: {
+ name: "楠ㄧ闅忚妯$増",
+ number: 222,
+ },
+ classifyform: {
+ categoryname: "",
+ },
+ topiclist: [
+ {
+ name: "鎮ㄧ殑韬綋搴峰鎯呭喌濡備綍",
+ number: 1,
+ type: 1,
+ },
+ {
+ name: "鎮ㄧ殑楗鎯呭喌濡備綍",
+ number: 2,
+ type: 2,
+ },
+ {
+ name: "鎮ㄧ殑鎭㈠鎯呭喌濡備綍",
+ number: 3,
+ type: 1,
+ },
+ ],
+ tableData: [
+ {
+ date: "濂�",
+ name: 12,
+ address: "50%",
+ },
+ {
+ date: "涓�鑸�",
+ name: 2,
+ address: "6.2%",
+ },
+ {
+ date: "宸�",
+ name: 0,
+ address: "0%",
+ },
+ ],
+ // 鏍囩琛ㄦ牸鏁版嵁
+ userList: [],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず寮瑰嚭灞�
+ open: false,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ // 瑙掕壊閫夐」
+ roleOptions: [],
+ // 琛ㄥ崟鍙傛暟
+ form: {},
+ forms: {
+ name: "",
+ },
+ numberlb: 22,
+ dialogFormVisible: false, //娣诲姞銆佷慨鏀圭被鍒脊妗�
+ lstamendtagVisible: false, //娣诲姞銆佷慨鏀规爣绛惧脊妗�
+ goQRCodeVisible: false, //浜岀淮鐮佸脊妗�
+ sidecolumnval: "", //绫诲埆鎼滅储
+ propss: { multiple: true },
+ topqueryParams: {}, //瀵煎嚭绛涢�夋潯浠�
+ options: [
+ {
+ value: 1,
+ label: "涓滃崡",
+ },
+ {
+ value: 2,
+ label: "瑗垮寳",
+ },
+ {
+ value: 3,
+ label: "浠ㄤ花浠�",
+ },
+ {
+ value: 4,
+ label: "鍏椋掗",
+ },
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() < Date.now() - 3600 * 1000 * 24;
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ pickerOptionsa: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 鏌ヨ鏍囩鍒楄〃鍙傛暟
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ tagname: undefined,
+ tagdescription: undefined,
+ },
+ // 鍒椾俊鎭�
+ columns: [
+ { key: 0, label: `鏍囩缂栧彿`, visible: true },
+ { key: 1, label: `鏍囩鍚嶇О`, visible: true },
+ { key: 2, label: `鏍囩鏄电О`, visible: true },
+ { key: 3, label: `閮ㄩ棬`, visible: true },
+ { key: 4, label: `鎵嬫満鍙风爜`, visible: true },
+ { key: 5, label: `鐘舵�乣, visible: true },
+ { key: 6, label: `鍒涘缓鏃堕棿`, visible: 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();
+ this.gitclasify();
+ },
+
+ methods: {
+ /** 鏌ヨ鏍囩鍒楄〃 */
+ getList() {
+ listtag(this.addDateRange(this.queryParams)).then((response) => {
+ console.log(response);
+ this.total = response.total;
+ this.userList = response.rows;
+ });
+ },
+ /** 淇敼鏍囩 */
+ handleUpdate(row) {
+ console.log(row, "淇敼鏍囩");
+ this.lstamendtagVisible = true;
+ this.lstamendtag = true;
+ this.tagform = {
+ isupload: row.isupload,
+ tagname: row.tagname,
+ tagcategoryid: row.tagcategoryid,
+ tagdescription: row.tagdescription,
+ tagid: row.tagid,
+ };
+ },
+ addladeltag() {
+ this.lstamendtagVisible = true;
+ this.lstamendtag = false;
+ this.tagform = {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ tagid: "",
+ };
+ },
+ // 娣诲姞/淇敼鏍囩
+ Maintenancetag() {
+ if (this.lstamendtag) {
+ toamendtag(this.addDateRange(this.tagform)).then((response) => {
+ console.log(response);
+ this.getList();
+ });
+ } else {
+ addapitag(this.addDateRange(this.tagform)).then((response) => {
+ console.log(response);
+ this.getList();
+ });
+ }
+ this.tagform = {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ tagid: "",
+ };
+ },
+
+ // 琛ㄥ崟閲嶇疆
+ 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");
+ },
+ //鍗曢寮规
+ handleUpdate() {
+ this.topicVisible = true;
+ },
+ //缁撴灉寮规
+ handleDelete() {
+ this.consequenceVisible = true;
+ },
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ handleQuery() {
+ this.queryParams.pageNum = 1;
+ this.getList();
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.resetForm("queryForm");
+ this.queryParams.tagname = "";
+ this.$refs.tree.setCurrentKey(null);
+ this.handleQuery();
+ },
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.tagid);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ },
+
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ this.download(
+ "base/tag/export",
+ {
+ ...this.topqueryParams,
+ },
+ `user_${new Date().getTime()}.xlsx`
+ );
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.Questionnairemanagement {
+ display: flex;
+}
+.sidecolumn {
+ width: 180px;
+ 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;
+ }
+}
+.topicdia {
+ text-align: center;
+ margin: 0 20px;
+
+ // overflow: scroll;
+
+ .top-text {
+ font-size: 25px;
+ font-weight: 600;
+ }
+ .top-mintext {
+ color: #bdae25;
+ font-size: 15px;
+ margin: 10px 0;
+ }
+ .ttaabbcc {
+ // 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);
+ margin: 15px 0;
+ margin-top: 30px;
+ padding: 30px;
+ }
+ .describe {
+ text-align: left;
+ margin-bottom: 20px;
+ span {
+ color: rgb(23, 140, 235);
+ margin-left: 5px;
+ }
+ }
+}
+::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;
+ text-align: left;
+ 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;
+ }
+}
+.document {
+ width: 100px;
+ height: 50px;
+}
+.documentf {
+ display: flex;
+ justify-content: flex-end;
+}
+.button-text {
+ color: rgb(70, 204, 238);
+}
+.button-textck {
+ color: rgb(39, 167, 67);
+}
+.button-textxg {
+ font-size: 18px;
+ color: rgb(35, 81, 233);
+}
+.button-textsc {
+ font-size: 18px;
+
+ color: rgb(23, 140, 235);
+}
+</style>
diff --git a/src/views/sfstatistics/statement/index.vue b/src/views/sfstatistics/statement/index.vue
new file mode 100644
index 0000000..72a380e
--- /dev/null
+++ b/src/views/sfstatistics/statement/index.vue
@@ -0,0 +1,952 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn">
+ <div class="sidecolumn-top">
+ <div class="top-wj">鎮h�呮潵婧�</div>
+ </div>
+
+ <div class="bottom-fl">
+ <el-tabs
+ tab-position="right"
+ v-model="activeName"
+ @tab-click="handleClick"
+ >
+ <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane>
+ <el-tab-pane label="浣忛櫌" name="bhospitalized"></el-tab-pane>
+ <el-tab-pane label="鍦ㄩ櫌" name="Inhospital"></el-tab-pane>
+ <el-tab-pane label="闂ㄨ瘖" name="outpatient"></el-tab-pane>
+ <el-tab-pane label="浣撴" name="physical"></el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="leftvlue-top">
+ <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
+ <el-tab-pane name="Local">
+ <span class="mulsz" slot="label">鎸夊嚭闄㈢梾鍖虹粺璁� </span>
+ </el-tab-pane>
+ <el-tab-pane name="sharing">
+ <span class="mulsz" slot="label">鎸夊嚭闄㈢瀹ょ粺璁� </span>
+ </el-tab-pane>
+ </el-tabs>
+ </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-select
+ v-model="queryParams.value1"
+ placeholder="榛樿鏄璐﹀彿鎵�灞炲尰闄�"
+ >
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑洪櫌鐥呭尯" prop="userName">
+ <el-select v-model="queryParams.value2" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="绠$悊鏂规" prop="userName">
+ <el-select v-model="queryParams.value3" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑洪櫌鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime1"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptionsa"
+ >
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璁″垝闅忚鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime2"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptions"
+ >
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璁″垝闅忚鏃ユ湡" prop="userName">
+ <el-date-picker
+ v-model="queryParams.valuetime2"
+ align="right"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ :picker-options="pickerOptions"
+ >
+ </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-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="medium"
+ @click="addladeltag"
+ 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">
+ <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"
+ :border="true"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column
+ fixed
+ label="搴忓彿"
+ align="center"
+ key="tagid"
+ prop="tagid"
+ width="50"
+ />
+ <el-table-column
+ fixed
+ label="鍑洪櫌鐥呭尯"
+ align="center"
+ key="tagname"
+ prop="tagname"
+ width="100"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="闂嵎"
+ align="center"
+ key="updateTime"
+ prop="updateTime"
+ >
+ </el-table-column>
+
+ <el-table-column
+ label="闂嵎鏇存柊鏃ユ湡"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="110"
+ >
+ </el-table-column>
+ <el-table-column
+ label="绠$悊鏂规"
+ align="center"
+ key="isupload"
+ prop="isupload"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚浠诲姟鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚瀹屾垚鐜�"
+ align="center"
+ key="isupload"
+ prop="isupload"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI澶栧懠娆℃暟"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="AI闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊鍙戦�佹鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊鍙戦�佹鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚娆℃暟"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="100"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚瀹屾垚鏁�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐闅忚瀹屾垚鐜�"
+ align="center"
+ key="tagdescription"
+ prop="tagdescription"
+ width="120"
+ >
+ </el-table-column>
+
+ <el-table-column
+ fixed="right"
+ label="鎿嶄綔"
+ align="center"
+ width="300"
+ 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-s-data"></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-share"></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>
+ </div>
+ </div>
+ <!-- 鍗曢灞曠ず寮规 -->
+ <el-dialog :visible.sync="topicVisible" width="45%">
+ <div class="topicdia">
+ <div class="top-text">{{ topicvalue.name }}</div>
+ <div class="top-mintext">闅忚瀹屾垚鏁皗{ topicvalue.number }}</div>
+ <div style="overflow-x: hidden; overflow-y: auto; max-height: 65vh">
+ <div class="ttaabbcc" v-for="item in topiclist" :key="item.name">
+ <div class="describe">
+ 绗瑊{ item.number }}棰橈細 {{ item.name }}?<span
+ >[{{ item.type == 1 ? "鍗曢�夐" : "澶氶�夐" }}]</span
+ >
+ </div>
+ <div>
+ <el-table :data="tableData" style="width: 100%">
+ <el-table-column prop="date" label="闂閫夐」">
+ </el-table-column>
+ <el-table-column prop="name" label="閫夋嫨浜烘暟">
+ </el-table-column>
+ <el-table-column prop="address" label="姣斾緥"> </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="topicVisible = false">鍏� 闂�</el-button>
+ </span>
+ </el-dialog>
+ <!-- 缁撴灉缁熻寮规 -->
+ <el-dialog title="鎻愮ず" :visible.sync="consequenceVisible" width="50%">
+ <div class="topicdia">
+ <div class="top-text" style="margin-bottom: 20px">闂嵎缁熻缁撴灉</div>
+ <div>
+ <el-table :data="tableData" style="width: 100%">
+ <el-table-column prop="date" label="鎮h�呭鍚�"> </el-table-column>
+ <el-table-column prop="namea" label="鎬у埆"> </el-table-column>
+ <el-table-column prop="namec" label="骞撮緞"> </el-table-column>
+ <el-table-column prop="named" label="鑱旂郴鏂瑰紡"> </el-table-column>
+ <el-table-column prop="namee" label="璁″垝鎵ц鏃堕棿" width="120">
+ </el-table-column>
+ <el-table-column prop="namex" label="瀹為檯瀹屾垚鏃堕棿" width="120">
+ </el-table-column>
+ <el-table-column prop="namez" label="瀹屾垚鏂瑰紡"> </el-table-column>
+ <el-table-column prop="nameh" label="闂嵎"> </el-table-column>
+ <el-table-column prop="namej" label="寰楀垎"> </el-table-column>
+ <!-- 鎴彇鍑犲垪閫夐」灞炴�у悕缁存姢鏁扮粍閬嶅巻 -->
+ <!-- <el-table-column prop="namet">
+ <template slot="header" slot-scope="scope">
+ <div>{{ scope.row.name }}<span>[鍗曢�夐]</span></div>
+ </template>
+ </el-table-column> -->
+ </el-table>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="consequenceVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="consequenceVisible = false"
+ >纭� 瀹�</el-button
+ >
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ toamendtag,
+ addapitag,
+ deletetag,
+ changetagcategory,
+ listtag,
+} from "@/api/system/label";
+
+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", //椤堕儴閫夋嫨
+ activeName: "first",
+ // 閬僵灞�
+ loading: false,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ idds: "", //鍒嗙被id
+ // 鎬绘潯鏁�
+ total: 0,
+ lstamendtag: false, //鏄惁淇敼鏍囩
+ topicVisible: false, //鎺у埗鍗曢寮规
+ consequenceVisible: false, //鎺у埗缁撴灉寮规
+ //淇敼娣诲姞鏍囩寮规鏁版嵁
+ tagform: {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ },
+ topicvalue: {
+ name: "楠ㄧ闅忚妯$増",
+ number: 222,
+ },
+ classifyform: {
+ categoryname: "",
+ },
+ topiclist: [
+ {
+ name: "鎮ㄧ殑韬綋搴峰鎯呭喌濡備綍",
+ number: 1,
+ type: 1,
+ },
+ {
+ name: "鎮ㄧ殑楗鎯呭喌濡備綍",
+ number: 2,
+ type: 2,
+ },
+ {
+ name: "鎮ㄧ殑鎭㈠鎯呭喌濡備綍",
+ number: 3,
+ type: 1,
+ },
+ ],
+ tableData: [
+ {
+ date: "濂�",
+ name: 12,
+ address: "50%",
+ },
+ {
+ date: "涓�鑸�",
+ name: 2,
+ address: "6.2%",
+ },
+ {
+ date: "宸�",
+ name: 0,
+ address: "0%",
+ },
+ ],
+ // 鏍囩琛ㄦ牸鏁版嵁
+ userList: [],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず寮瑰嚭灞�
+ open: false,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ // 瑙掕壊閫夐」
+ roleOptions: [],
+ // 琛ㄥ崟鍙傛暟
+ form: {},
+ forms: {
+ name: "",
+ },
+ numberlb: 22,
+ dialogFormVisible: false, //娣诲姞銆佷慨鏀圭被鍒脊妗�
+ lstamendtagVisible: false, //娣诲姞銆佷慨鏀规爣绛惧脊妗�
+ goQRCodeVisible: false, //浜岀淮鐮佸脊妗�
+ sidecolumnval: "", //绫诲埆鎼滅储
+ propss: { multiple: true },
+ topqueryParams: {}, //瀵煎嚭绛涢�夋潯浠�
+ options: [
+ {
+ value: 1,
+ label: "涓滃崡",
+ },
+ {
+ value: 2,
+ label: "瑗垮寳",
+ },
+ {
+ value: 3,
+ label: "浠ㄤ花浠�",
+ },
+ {
+ value: 4,
+ label: "鍏椋掗",
+ },
+ ],
+ pickerOptions: {
+ disabledDate(time) {
+ return time.getTime() < Date.now() - 3600 * 1000 * 24;
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ pickerOptionsa: {
+ disabledDate(time) {
+ return time.getTime() > Date.now();
+ },
+ shortcuts: [
+ {
+ text: "浠婂ぉ",
+ onClick(picker) {
+ picker.$emit("pick", new Date());
+ },
+ },
+ {
+ text: "鏄ㄥぉ",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24);
+ picker.$emit("pick", date);
+ },
+ },
+ {
+ text: "涓�鍛ㄥ墠",
+ onClick(picker) {
+ const date = new Date();
+ date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", date);
+ },
+ },
+ ],
+ },
+ // 鏌ヨ鏍囩鍒楄〃鍙傛暟
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ tagname: undefined,
+ tagdescription: undefined,
+ },
+ // 鍒椾俊鎭�
+ columns: [
+ { key: 0, label: `鏍囩缂栧彿`, visible: true },
+ { key: 1, label: `鏍囩鍚嶇О`, visible: true },
+ { key: 2, label: `鏍囩鏄电О`, visible: true },
+ { key: 3, label: `閮ㄩ棬`, visible: true },
+ { key: 4, label: `鎵嬫満鍙风爜`, visible: true },
+ { key: 5, label: `鐘舵�乣, visible: true },
+ { key: 6, label: `鍒涘缓鏃堕棿`, visible: 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();
+ this.gitclasify();
+ },
+
+ methods: {
+ /** 鏌ヨ鏍囩鍒楄〃 */
+ getList() {
+ listtag(this.addDateRange(this.queryParams)).then((response) => {
+ console.log(response);
+ this.total = response.total;
+ this.userList = response.rows;
+ });
+ },
+ /** 淇敼鏍囩 */
+ handleUpdate(row) {
+ console.log(row, "淇敼鏍囩");
+ this.lstamendtagVisible = true;
+ this.lstamendtag = true;
+ this.tagform = {
+ isupload: row.isupload,
+ tagname: row.tagname,
+ tagcategoryid: row.tagcategoryid,
+ tagdescription: row.tagdescription,
+ tagid: row.tagid,
+ };
+ },
+ addladeltag() {
+ this.lstamendtagVisible = true;
+ this.lstamendtag = false;
+ this.tagform = {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ tagid: "",
+ };
+ },
+ // 娣诲姞/淇敼鏍囩
+ Maintenancetag() {
+ if (this.lstamendtag) {
+ toamendtag(this.addDateRange(this.tagform)).then((response) => {
+ console.log(response);
+ this.getList();
+ });
+ } else {
+ addapitag(this.addDateRange(this.tagform)).then((response) => {
+ console.log(response);
+ this.getList();
+ });
+ }
+ this.tagform = {
+ isupload: "",
+ tagname: "",
+ tagcategoryid: "",
+ tagdescription: "",
+ tagid: "",
+ };
+ },
+
+ // 琛ㄥ崟閲嶇疆
+ 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");
+ },
+ //鍗曢寮规
+ handleUpdate() {
+ this.topicVisible = true;
+ },
+ //缁撴灉寮规
+ handleDelete() {
+ this.consequenceVisible = true;
+ },
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ handleQuery() {
+ this.queryParams.pageNum = 1;
+ this.getList();
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.resetForm("queryForm");
+ this.queryParams.tagname = "";
+ this.$refs.tree.setCurrentKey(null);
+ this.handleQuery();
+ },
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.tagid);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ },
+
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ this.download(
+ "base/tag/export",
+ {
+ ...this.topqueryParams,
+ },
+ `user_${new Date().getTime()}.xlsx`
+ );
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.Questionnairemanagement {
+ display: flex;
+}
+.sidecolumn {
+ width: 180px;
+ 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;
+ }
+}
+.topicdia {
+ text-align: center;
+ margin: 0 20px;
+
+ // overflow: scroll;
+
+ .top-text {
+ font-size: 25px;
+ font-weight: 600;
+ }
+ .top-mintext {
+ color: #bdae25;
+ font-size: 15px;
+ margin: 10px 0;
+ }
+ .ttaabbcc {
+ // 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);
+ margin: 15px 0;
+ margin-top: 30px;
+ padding: 30px;
+ }
+ .describe {
+ text-align: left;
+ margin-bottom: 20px;
+ span {
+ color: rgb(23, 140, 235);
+ margin-left: 5px;
+ }
+ }
+}
+::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;
+ text-align: left;
+ 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;
+ }
+}
+.document {
+ width: 100px;
+ height: 50px;
+}
+.documentf {
+ display: flex;
+ justify-content: flex-end;
+}
+.button-text {
+ color: rgb(70, 204, 238);
+}
+.button-textck {
+ color: rgb(39, 167, 67);
+}
+.button-textxg {
+ font-size: 18px;
+ color: rgb(35, 81, 233);
+}
+.button-textsc {
+ font-size: 18px;
+
+ color: rgb(23, 140, 235);
+}
+</style>
diff --git a/src/views/shortmessage/aoconnect/index.vue b/src/views/shortmessage/aoconnect/index.vue
new file mode 100644
index 0000000..574f966
--- /dev/null
+++ b/src/views/shortmessage/aoconnect/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/aoprojection/index.vue b/src/views/shortmessage/aoprojection/index.vue
new file mode 100644
index 0000000..5fbfa39
--- /dev/null
+++ b/src/views/shortmessage/aoprojection/index.vue
@@ -0,0 +1,230 @@
+<template>
+ <div class="container">
+ <div class="header">
+ <div>
+ 鎴块棿鍙�:
+ <input type="text" id="room" />
+ <button @click="createRoom()">鍒涘缓鎴块棿</button>
+ </div>
+ <div>
+ 瀵规柟鎴块棿鍙�
+ <input type="text" id="receive" />
+ <button @click="Connect()">杩炴帴</button>
+ </div>
+ </div>
+ <div style="margin-top: 20px">
+ <video
+ src=""
+ id="self"
+ autoplay
+ controls
+ muted
+ style="width: 500px; object-fit: cover; margin-right: 100px"
+ ></video>
+ <video
+ src=""
+ id="other"
+ autoplay
+ controls
+ muted
+ style="width: 500px; object-fit: cover"
+ ></video>
+ </div>
+ </div>
+</template>
+
+<script>
+let PeerConnection =
+ window.PeerConnection ||
+ window.webkitPeerConnection00 ||
+ window.webkitRTCPeerConnection ||
+ window.mozRTCPeerConnection;
+let nativeRTCIceCandidate = window.mozRTCIceCandidate || window.RTCIceCandidate;
+let nativeRTCSessionDescription =
+ window.mozRTCSessionDescription || window.RTCSessionDescription;
+//ice鏈嶅姟鍣ㄥ湴鍧�
+const iceServer = {
+ iceServers: [
+ {
+ url: "turn:42.192.40.58:3478?transport=udp",
+ username: "ddssingsong",
+ credential: "123456",
+ },
+ {
+ url: "turn:42.192.40.58:3478?transport=tcp",
+ username: "ddssingsong",
+ credential: "123456",
+ },
+ ],
+};
+let socket = "";
+let receiver = "";
+let pc;
+
+export default {
+ data() {
+ return {};
+ },
+
+ created() {},
+
+ methods: {
+ createRoom() {
+ let room = document.getElementById("room");
+ if (!room.value) {
+ alert("璇疯緭鍏ユ埧闂村彿!!!");
+ return;
+ }
+ //寤虹珛websocket杩炴帴
+ socket = new WebSocket(`wss://127.0.0.1:3000/single?room=${room.value}`);
+ socket.onopen = async () => {
+ alert("杩炴帴鎴愬姛");
+ try {
+ //鑾峰彇褰撳墠璁惧鐨勮棰戞祦
+ let stream = await navigator.mediaDevices.getDisplayMedia({
+ video: true,
+ audio: false,
+ });
+ console.log(stream);
+ //鍒濆鍖朠C婧�
+ pc = this.initPC(stream);
+ console.log(pc);
+ //娣诲姞闊宠棰戞祦
+ pc.addStream(stream);
+ console.log(pc);
+ let video = document.getElementById("self");
+ video.srcObject = stream;
+ console.log(video);
+ } catch (error) {
+ console.log(error);
+ alert("鑾峰彇娴佸け璐�");
+ }
+ };
+ socket.onmessage = async (message) => {
+ let data = JSON.parse(message.data);
+ switch (data.name) {
+ //鎺ユ敹鍒伴個璇�
+ case "peer":
+ receiver = data.receiver;
+ this.acceptAudio();
+ break;
+ /**
+ * 1.閭�璇蜂汉灏嗗鏂圭殑闊宠棰戞祦閫氳繃setRemoteDescription鍑芥暟杩涜瀛樺偍
+ * 2.瀛樺偍瀹屽悗閭�璇蜂汉鍒涘缓answer鏉ヨ幏鍙栬嚜宸辩殑闊宠棰戞祦,閫氳繃setLocalDescription鍑芥暟瀛樺偍鑷繁鐨勯煶瑙嗛娴�,骞跺彂閫乤nswer鎸囦护(鎼哄甫鑷繁鐨勯煶瑙嗛)鍛婅瘔瀵规柟瑕佸瓨鍌ㄩ個璇蜂汉鐨勯煶瑙嗛
+ */
+ case "offer":
+ //褰撴敹鍒板鏂规帴鏀惰姹傚悗,璁剧疆闊抽婧�,骞跺彂閫乤nswer缁欏鏂�
+ pc.setRemoteDescription(
+ new nativeRTCSessionDescription(data.data.sdp)
+ );
+ pc.createAnswer(
+ (session_desc) => {
+ pc.setLocalDescription(session_desc);
+ socket.send(
+ JSON.stringify({
+ name: "answer",
+ data: {
+ sdp: session_desc,
+ },
+ receiver: receiver,
+ })
+ );
+ },
+ (err) => {
+ console.log(err);
+ }
+ );
+ break;
+ case "answer":
+ //璁剧疆閭�璇蜂汉鍙戞潵鐨勯煶棰戞簮
+ pc.setRemoteDescription(
+ new nativeRTCSessionDescription(data.data.sdp)
+ );
+ break;
+ case "ice_candidate":
+ //娣诲姞ice婧�,杩欎竴姝ュ緢閲嶈,濡傛灉娌℃湁鎺ユ敹ice鍒欐煡鐪嬫槸鍚︽祦绋嬫湁闂
+ var candidate = new nativeRTCIceCandidate(data.data);
+ pc.addIceCandidate(candidate);
+ break;
+ }
+ };
+ },
+ //鍒濆鍖朠C婧�
+ initPC() {
+ let pc = new PeerConnection(iceServer);
+ pc.onicecandidate = (evt) => {
+ if (evt.candidate) {
+ socket.send(
+ JSON.stringify({
+ name: `ice_candidate`,
+ data: {
+ id: evt.candidate.sdpMid,
+ label: evt.candidate.sdpMLineIndex,
+ sdpMLineIndex: evt.candidate.sdpMLineIndex,
+ candidate: evt.candidate.candidate,
+ },
+ receiver: receiver,
+ })
+ );
+ }
+ };
+ pc.onaddstream = (evt) => {
+ let stream = evt.stream;
+ let video = document.getElementById("other");
+ video.srcObject = stream;
+ };
+ return pc;
+ },
+ //鍜屽鏂瑰缓绔嬭繛鎺�
+ Connect() {
+ receiver = document.getElementById("receive").value;
+ console.log(receiver);
+ if (!socket) {
+ alert("鍏堝垱寤鸿嚜宸辩殑鎴块棿鍙�!!");
+ return;
+ }
+ if (!receiver) {
+ alert("璇疯緭鍏ュ鏂规埧闂村彿");
+ return;
+ }
+ socket.send(JSON.stringify({ name: "createRoom", receiver: receiver }));
+ console.log("鎴愬姛");
+ },
+ //鎺ユ敹閭�璇�
+ async acceptAudio() {
+ /**
+ * 1.鐐瑰嚮鍚屾剰鍚�
+ * 2.鑾峰彇鑷繁鐨勮棰戞祦
+ * 3.鍒濆鍖朠C婧�
+ * 4.PC娣诲姞闊宠棰戞祦
+ * 5.鍒涘缓offer,鑾峰彇鑷繁鐨勯煶瑙嗛娴�,骞堕�氳繃setLocalDescription鍑芥暟瀛樺偍鑷繁鐨勯煶瑙嗛娴�
+ * 6.骞跺彂閫乸eer鎸囦护(鎼哄甫鑷繁鐨勯煶瑙嗛)鍛婅瘔閭�璇蜂汉瑕佸瓨鍌ㄨ嚜宸辩殑闊宠棰�
+ */
+ try {
+ pc.createOffer(
+ (session_desc) => {
+ pc.setLocalDescription(session_desc);
+ socket.send(
+ JSON.stringify({
+ name: "offer",
+ data: {
+ sdp: session_desc,
+ },
+ receiver: receiver,
+ })
+ );
+ },
+ (err) => {
+ console.log(err);
+ }
+ );
+ } catch (error) {
+ alert("妫�娴嬪埌褰撳墠璁惧涓嶆敮鎸侀害鍏嬮,璇疯缃潈闄愬悗鍦ㄩ噸璇�");
+ this.socket.close();
+ }
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/views/shortmessage/aovideo/index.vue b/src/views/shortmessage/aovideo/index.vue
new file mode 100644
index 0000000..099f5d3
--- /dev/null
+++ b/src/views/shortmessage/aovideo/index.vue
@@ -0,0 +1,239 @@
+<template>
+ <div class="demo">
+ <div class="rtcBox">
+ <div>
+ <div class="video-box">
+ <video src="" id="rtcA" controls autoplay></video>
+ <h5>A</h5>
+ </div>
+ <div class="chat-box" v-show="!allowHangup && messageOpen">
+ <h5>鏀舵秷鎭�</h5>
+ <p>{{ receiveText }}</p>
+ </div>
+ </div>
+ <div>
+ <div class="video-box">
+ <video src="" id="rtcB" controls autoplay></video>
+ <h5>B</h5>
+ <button @click="call" :disabled="allowCall">鍙戣捣杩炴帴</button>
+ <button @click="hangup" :disabled="allowHangup">hangup</button>
+ </div>
+ <div class="chat-box" v-show="!allowHangup && messageOpen">
+ <h5>鍙戞秷鎭�</h5>
+ <textarea v-model="sendText"></textarea>
+ <br />
+ <button @click="send">鍙戦��</button>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "local1",
+ data() {
+ return {
+ peerA: null,
+ peerB: null,
+ channelA: null,
+ channelB: null,
+ offerOption: {
+ offerToReceiveAudio: 1,
+ offerToReceiveVideo: 1,
+ },
+ allowCall: true,
+ allowHangup: true,
+ messageOpen: false,
+ sendText: "",
+ receiveText: "",
+ };
+ },
+ methods: {
+ send() {
+ this.channelB.send(JSON.stringify({ name: this.sendText }));
+ this.sendText = "";
+ },
+ start() {
+ this.state = "2";
+ this.newRecognition.start();
+ },
+ stop() {
+ this.state = "1";
+ this.newRecognition.stop();
+ },
+ async call() {
+ if (!this.peerA || !this.peerB) {
+ // 鍒ゆ柇鏄惁鏈夊搴斿疄渚嬶紝娌℃湁灏遍噸鏂板垱寤�
+ this.initPeer();
+ }
+ try {
+ let offer = await this.peerB.createOffer(this.offerOption); // 鍒涘缓 offer
+ await this.onCreateOffer(offer);
+ } catch (e) {
+ console.log("createOffer: ", e);
+ }
+
+ this.allowCall = true;
+ this.allowHangup = false;
+ },
+ hangup() {
+ this.peerA.close();
+ this.peerB.close();
+ this.channelA.close();
+ this.channelB.close();
+ this.peerA = null;
+ this.peerB = null;
+ this.channelA = null;
+ this.channelB = null;
+ this.sendText = "";
+ this.receiveText = "";
+ this.allowCall = false;
+ this.allowHangup = true;
+ },
+ async onCreateOffer(desc) {
+ try {
+ await this.peerB.setLocalDescription(desc); // 鍛煎彨绔缃湰鍦� offer 鎻忚堪
+ } catch (e) {
+ console.log("Offer-setLocalDescription: ", e);
+ }
+ try {
+ await this.peerA.setRemoteDescription(desc); // 鎺ユ敹绔缃繙绋� offer 鎻忚堪
+ } catch (e) {
+ console.log("Offer-setRemoteDescription: ", e);
+ }
+ try {
+ let answer = await this.peerA.createAnswer(); // 鎺ユ敹绔垱寤� answer
+ await this.onCreateAnswer(answer);
+ } catch (e) {
+ console.log("createAnswer: ", e);
+ }
+ },
+ async onCreateAnswer(desc) {
+ try {
+ await this.peerA.setLocalDescription(desc); // 鎺ユ敹绔缃湰鍦� answer 鎻忚堪
+ } catch (e) {
+ console.log("answer-setLocalDescription: ", e);
+ }
+ try {
+ await this.peerB.setRemoteDescription(desc); // 鍛煎彨绔缃繙绋� answer 鎻忚堪
+ } catch (e) {
+ console.log("answer-setRemoteDescription: ", e);
+ }
+ },
+ initPeer() {
+ // 鍒涘缓杈撳嚭绔� PeerConnection
+ let PeerConnection =
+ window.RTCPeerConnection ||
+ window.mozRTCPeerConnection ||
+ window.webkitRTCPeerConnection;
+ this.peerA = new PeerConnection();
+ this.peerA.addStream(this.localstream); // 娣诲姞鏈湴娴�
+ // 鐩戝惉 A 鐨処CE鍊欓�変俊鎭�
+ // 濡傛灉鏀堕泦鍒帮紝灏辨坊鍔犵粰 B
+ this.peerA.onicecandidate = (event) => {
+ if (event.candidate) {
+ this.peerB.addIceCandidate(event.candidate);
+ }
+ };
+ this.peerA.ondatachannel = (event) => {
+ console.log(event);
+ this.channelA = event.channel;
+ this.channelA.binaryType = "arraybuffer";
+ this.channelA.onopen = (e) => {
+ console.log("channelA onopen", e);
+ };
+ this.channelA.onclose = (e) => {
+ console.log("channelA onclose", e);
+ };
+ this.channelA.onmessage = (e) => {
+ this.receiveText = JSON.parse(e.data).name;
+ console.log("channelA onmessage", e.data);
+ };
+ };
+ // this.channelA.send('Hi you!');
+ // 鍒涘缓鍛煎彨绔�
+ this.peerB = new PeerConnection();
+ this.peerB.onaddstream = (event) => {
+ // 鐩戝惉鏄惁鏈夊獟浣撴祦鎺ュ叆锛屽鏋滄湁灏辫祴鍊肩粰 rtcB 鐨� src
+ console.log("event-stream", event);
+ let video = document.querySelector("#rtcB");
+ video.srcObject = event.stream;
+ };
+ this.channelB = this.peerB.createDataChannel("messagechannel");
+ console.log("this.channelB", this.channelB);
+ this.channelB.binaryType = "arraybuffer";
+ this.channelB.onopen = (event) => {
+ console.log(1);
+ console.log("channelB onopen", event);
+ this.messageOpen = true;
+ };
+ this.channelB.onclose = function (event) {
+ console.log(1);
+ console.log("channelB onclose", event);
+ };
+ // 鐩戝惉 B 鐨処CE鍊欓�変俊鎭�
+ // 濡傛灉鏀堕泦鍒帮紝灏辨坊鍔犵粰 A
+ this.peerB.onicecandidate = (event) => {
+ if (event.candidate) {
+ this.peerA.addIceCandidate(event.candidate);
+ }
+ };
+ this.allowCall = false;
+ },
+ async createMedia() {
+ // 淇濆瓨鏈湴娴佸埌鍏ㄥ眬锛堣棰戦煶棰戦兘鏀寔锛�
+ this.localstream = await navigator.mediaDevices.getUserMedia({
+ audio: true,
+ video: true,
+ });
+ console.log(this.localstream);
+ console.log(
+ this.localstream.getVideoTracks(),
+ this.localstream.getAudioTracks()
+ );
+ let video = document.querySelector("#rtcA");
+ video.srcObject = this.localstream;
+ this.initPeer(); // 鑾峰彇鍒板獟浣撴祦鍚庯紝璋冪敤鍑芥暟鍒濆鍖� RTCPeerConnection
+ },
+ },
+ mounted() {
+ // 鑾峰彇鏈�鏂拌鍥惧悗鑾峰彇鏈湴娴�
+ this.$nextTick(() => {
+ // {mediaSource: 'screen'}
+ this.createMedia();
+ });
+ },
+};
+</script>
+
+<style lang="scss">
+.rtcBox {
+ display: flex;
+ justify-content: center;
+ .video-box {
+ height: 380px;
+ border-bottom: 1px solid #1fbeca;
+ margin-bottom: 10px;
+ }
+ video {
+ width: 400px;
+ height: 300px;
+ margin-left: 20px;
+ background-color: #ddd;
+ }
+ .chat-box {
+ text-align: center;
+ h5 {
+ margin-bottom: 10px;
+ }
+ p,
+ textarea {
+ width: 240px;
+ height: 60px;
+ border: 1px solid #000;
+ display: inline-block;
+ }
+ }
+}
+</style>
diff --git a/src/views/shortmessage/communication/index.vue b/src/views/shortmessage/communication/index.vue
index 34e458f..afcbac4 100644
--- a/src/views/shortmessage/communication/index.vue
+++ b/src/views/shortmessage/communication/index.vue
@@ -63,9 +63,13 @@
</template>
<script>
-import LemonMessageVoice from "./lemon-message-voice";
import EmojiData from "./database/emoji";
-import { sendWebsocket, closeWebsocket } from "@/websocket/websocket.js";
+import { chitchatapi } from "@/api/noteapi/chitchat";
+import {
+ sendWebsocket,
+ websocketSend,
+ closeWebsocket,
+} from "@/websocket/websocket.js";
// Vue.component(LemonMessageVoice.name, LemonMessageVoice);
// 鑾峰彇鏃堕棿
const getTime = () => {
@@ -102,6 +106,9 @@
};
export default {
name: "communication",
+ provide: {
+ IMUI: "IMUI value",
+ },
data() {
return {
theme: "blue",
@@ -292,19 +299,19 @@
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",
@@ -365,7 +372,7 @@
isBottom: true,
},
]);
-
+ // 宸ュ叿鏍�
IMUI.initEditorTools([
{
name: "emoji",
@@ -491,6 +498,7 @@
IMUI.messageViewToBottom();
}
},
+ // 瀹氫箟鏂版秷鎭�
appendCustomMessage() {
const { IMUI } = this.$refs;
const message = {
@@ -581,15 +589,74 @@
instance.closeDrawer();
},
// 寤虹珛杩炴帴
- requstWs() {
+ requstWs(message, next, file) {
console.log("杩炴帴");
// 闃叉鐢ㄦ埛澶氭杩炵画鐐瑰嚮鍙戣捣璇锋眰锛屾墍浠ヨ鍏堝叧闂笂娆$殑ws璇锋眰銆�
closeWebsocket();
+ let formData = new FormData();
+
+ // if (file) {
+ // const reader = new FileReader();
+ // console.log(reader);
+ // console.log(file);
+ // reader.onload = (file) => {
+ // console.log(file);
+ // console.log(reader);
+ // const imageData = reader.result;
+ // //鏂囦欢瀛楄妭澶у皬
+ // // const fileSize = file.loaded;
+ // const fileSize = imageData.length;
+ // console.log("byteLength 锛� ", fileSize);
+ // const chunkSize = 4096; // 璁剧疆姣忎釜鏁版嵁鍧楃殑澶у皬
+ // let offset = 0;
+
+ // // 鍒嗗潡浼犺緭鍥剧墖鏁版嵁
+ // while (offset < imageData.length) {
+ // const chunk = imageData.slice(offset, offset + chunkSize);
+ // const obj = {
+ // type: file.type,
+ // userId: "1", //鎺ユ敹鏁版嵁鏂�
+ // fileSize: fileSize,
+ // image: chunk,
+ // };
+ // console.log(JSON.stringify(obj));
+ // // 鍙戣捣ws璇锋眰
+ // // sendWebsocket(
+ // // "ws://192.168.31.121:8080/chat?userId=2",
+ // // JSON.stringify(obj),
+ // // this.wsMessage,
+ // // this.wsError
+ // // );
+ // websocketSend(JSON.stringify(obj));
+ // offset += chunkSize;
+
+ // console.log("offset 锛� ", offset);
+ // }
+
+ // // 鍙戦�佸畬鎴愭爣璁�
+ // console.log("message ");
+ // };
+
+ // return reader.readAsDataURL(file);
+ // }
+
// 璺熷悗绔崗鍟嗭紝闇�瑕佷粈涔堝弬鏁版暟鎹粰鍚庡彴
+ if (file) {
+ formData.append("files", file);
+ console.log(formData.get("files"));
+ // img.src = window.URL.createObjectURL(temp);
+ chitchatapi(formData).then((response) => {
+ console.log(response);
+ });
+
+ return console.log(formData);
+ }
+
const obj = {
- type: "text",
- content: "甯濆緱鍦g浉鐩告洶搴�",
+ type: "object",
userId: "1", //鎺ユ敹鏁版嵁鏂�
+ fileSize: "1212",
+ image: "12",
};
// 鍙戣捣ws璇锋眰
sendWebsocket(
@@ -625,9 +692,10 @@
},
// 鍙戦�佹柊娑堟伅瑙﹀彂
handleSend(message, next, file) {
- console.log(message, file);
+ console.log(message);
+ console.log(file);
console.log(next);
- this.requstWs();
+ this.requstWs(message, next, file);
setTimeout(() => {
next();
}, 1000);
diff --git a/src/views/shortmessage/communication/lemon-message-voice.vue b/src/views/shortmessage/communication/lemon-message-voice.vue
deleted file mode 100644
index 1f91e54..0000000
--- a/src/views/shortmessage/communication/lemon-message-voice.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<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/messagebank/compile/index.vue b/src/views/shortmessage/messagebank/compile/index.vue
new file mode 100644
index 0000000..bd742e1
--- /dev/null
+++ b/src/views/shortmessage/messagebank/compile/index.vue
@@ -0,0 +1,155 @@
+<template>
+ <div>
+ <div class="headline">
+ <div class="basics">闂閰嶇疆</div>
+ <div class="headbottom">
+ <el-button type="primary" icon="el-icon-notebook-2" @click="addzbiaofn"
+ >鍋ュ悍淇℃伅妯$増</el-button
+ >
+ <el-button @click="emptyfn" type="primary" icon="el-icon-refresh-right"
+ >娓呯┖鐭俊鍐呭</el-button
+ >
+ </div>
+ </div>
+ <div class="top-text">
+ <el-input
+ :rows="5"
+ placeholder="璇疯緭鍏ョ煭淇″唴瀹规垨鍒╃敤妯℃澘杩涜缂栬緫"
+ type="textarea"
+ v-model="form.desc"
+ ></el-input>
+ </div>
+ <div class="headline">
+ <div class="basics">
+ 鎺ユ敹鐭俊鍙风爜<span>娉細鎵嬫満鍙风爜鐢ㄨ嫳鏂囩鍙� ';' 鍒嗛殧寮�锛�</span>
+ </div>
+ <div class="headbottom">
+ <el-button type="primary" icon="el-icon-phone" @click="selectphp"
+ >閫夋辰鍙风爜</el-button
+ >
+ <el-button
+ type="primary"
+ icon="el-icon-refresh-right
+"
+ >娓呯┖鍙风爜</el-button
+ >
+ </div>
+ </div>
+ <div class="top-text">
+ <el-input
+ :rows="5"
+ placeholder="璇疯緭鍏�"
+ type="textarea"
+ v-model="form.desc"
+ ></el-input>
+ </div>
+ <div class="headlinetwo">
+ <div class="basics">
+ <el-checkbox v-model="form.checked">棰勭害鍙戦��</el-checkbox>
+ </div>
+ <div class="headbottom">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-arrow-left"
+ @click="addzbiao"
+ >杩斿洖鐭俊鍒楄〃</el-button
+ >
+ <el-button type="success" plain icon="el-icon-position">鍙戦��</el-button>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ optionvalue: "涓嶉渶瑕併�佹病鏈夈�佷笉鐭ラ亾",
+ form: {
+ name: "",
+ region: "",
+ date1: "",
+ date2: "",
+ delivery: false,
+ type: [],
+ resource: "",
+ desc: "",
+ },
+ deployList: [
+ {
+ id: 1,
+ name: "鏈�",
+ valuetop:
+ "(?!.*蹇榺.*涓峾.*娌�)^.*(鏄瘄鏈墊瀵箌鍋殀浣渱妫�|鏌澶嶈瘖|濂絴鍙傚姞|澶嶈瘖|鍘�(杩噟濂絴浜唡瀹寍鍖婚櫌)|鏉�(杩噟浜唡鍖婚櫌))|娌¢敊|瀵瑰憖|鍙兘|(宸茬粡|鏃�)鍘讳簡|寮�浜嗚嵂|鑵板甫|鍚婂甫|瑕佺殑|(?<!娌�)鏈夌殑|琛ㄥ甫,10;瑕�,5",
+ },
+ {
+ id: 2,
+ name: "涓嶇煡閬�",
+ valuetop:
+ "(涓峾娌璋亅楝紎鎬庝箞).*(鐥厊鍙兘|鐭ラ亾|浜嗚В|娓呮|鎳倈鏄庣櫧|纭|纭畾|鏅撳緱|鐭ユ檽|璁ゅ緱|璇嗗緱|鍗拌薄|鐔熸倝|璁皘浼殀鍏冲績|鍏虫敞|娉ㄦ剰|鍛婅瘔|閫氱煡|鍚�)",
+ },
+ ],
+ };
+ },
+
+ created() {},
+
+ methods: {
+ onSubmit() {
+ console.log("submit!");
+ },
+ deletei(index) {
+ console.log(index);
+ this.deployList.splice(index, 1);
+ },
+ addzbiao() {
+ this.$router.go(-1);
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.top-text {
+ margin: 15px;
+ margin-top: 0;
+ padding: 10px;
+ 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);
+}
+.basic {
+ height: 50px;
+ margin: 15px;
+ margin-bottom: 0;
+ padding: 0 20px 20px 20px;
+ line-height: 50px;
+ background: #92c5f0;
+}
+.headline {
+ display: flex;
+ height: 50px;
+ margin: 15px;
+ margin-bottom: 0;
+ padding: 0 20px 20px 20px;
+ line-height: 50px;
+ background: #92c5f0;
+ justify-content: space-between;
+ span {
+ margin-left: 20px;
+ color: #fa3a3a;
+ font-weight: 600;
+ }
+}
+.headlinetwo {
+ display: flex;
+ height: 50px;
+ margin: 15px;
+ margin-bottom: 0;
+ padding: 0 20px 20px 20px;
+ line-height: 50px;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/shortmessage/messagebank/index.vue b/src/views/shortmessage/messagebank/index.vue
index 98fc3b7..cab0334 100644
--- a/src/views/shortmessage/messagebank/index.vue
+++ b/src/views/shortmessage/messagebank/index.vue
@@ -2,38 +2,49 @@
<div class="Questionnairemanagement">
<!-- 宸︿晶鏍� -->
<div class="sidecolumn">
- <div class="notebuttom"><i class="el-icon-chat-dot-square" />鍙戠煭淇�</div>
+ <div class="notebuttom" @click="handleAdd">
+ <i class="el-icon-chat-dot-square" />鍙戠煭淇�
+ </div>
+ <el-divider></el-divider>
<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="classestag == 1 ? 'state-lines' : 'state-line'"
+ @click="completefn"
+ >
+ <div class="value-left"><i class="el-icon-menu" />鍏ㄩ儴</div>
<div class="quantityq">22</div>
</div>
- <div class="state-line">
+ <div
+ :class="classestag == 2 ? 'state-lines' : 'state-line'"
+ @click="succeedfn"
+ >
<div class="value-left">
- <i class="el-icon-chat-dot-square" />鍙戦�佹垚鍔�
+ <i class="el-icon-circle-check" />鍙戦�佹垚鍔�
</div>
<div class="quantitycg">22</div>
</div>
- <div class="state-line">
+ <div
+ :class="classestag == 3 ? 'state-lines' : 'state-line'"
+ @click="losefn"
+ >
<div class="value-left">
- <i class="el-icon-chat-dot-square" />鍙戦�佸け璐�
+ <i class="el-icon-warning-outline" />鍙戦�佸け璐�
</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="classestag == 4 ? 'state-lines' : 'state-line'"
+ @click="awaitfn"
+ >
+ <div class="value-left"><i class="el-icon-s-help" />寰呭彂閫�</div>
<div class="quantityd">22</div>
</div>
</div>
</div>
<!-- 鍙充晶鏁版嵁 -->
<div class="leftvlue">
- <div class="leftvlue-top">鐭俊璇︽儏</div>
+ <div class="leftvlue-top">鐭俊璇︽儏({{ total }})</div>
<div class="leftvlue-bg">
<el-row :gutter="20">
<!--鐢ㄦ埛鏁版嵁-->
@@ -55,7 +66,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鍒涘缓鏃堕棿">
+ <el-form-item label="涓婁紶鏃ユ湡">
<el-date-picker
v-model="dateRange"
style="width: 240px"
@@ -148,63 +159,84 @@
prop="userId"
/>
<el-table-column
- label="涓绘棬"
+ label="鎵嬫満鍙风爜"
align="center"
key="userName"
prop="userName"
:show-overflow-tooltip="true"
/>
<el-table-column
- label="闂鏂囨湰"
+ label="绫诲瀷"
align="center"
key="nickName"
prop="nickName"
- width="400"
:show-overflow-tooltip="true"
/>
<el-table-column
- label="闂璇煶"
+ label="鍙戦�佷汉"
align="center"
- key="aphonenumber"
- prop="aphonenumber"
- width="400"
+ key="transmitleg"
+ prop="transmitleg"
/><el-table-column
- label="鍏宠仈鎸囨爣"
+ label="鎺ユ敹浜�"
align="center"
key="bphonenumber"
prop="bphonenumber"
width="120"
/>
<el-table-column
- label="鎸囨爣閫夐」"
+ 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">
+ prop="createTime"
+ width="160"
+ >
<template slot-scope="scope">
- <el-switch
- v-model="scope.row.status"
- active-value="0"
- inactive-value="1"
- @change="handleStatusChange(scope.row)"
- ></el-switch>
+ <span>{{ parseTime(scope.row.createTime) }}</span>
+ </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"
+ key="sendvalue"
+ prop="sendvalue"
+ width="300"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="鍙戦�佺姸鎬�"
+ align="center"
+ key="state"
+ prop="state"
+ >
+ <template slot-scope="scope">
+ <div
+ v-if="scope.row.state == 1"
+ style="color: rgb(58, 250, 144)"
+ >
+ <i class="el-icon-check"></i>
+ </div>
+ <div
+ v-else-if="scope.row.state == 2"
+ style="color: rgb(250, 96, 58)"
+ >
+ <i class="el-icon-check"></i>
+ </div>
</template>
</el-table-column>
<el-table-column
label="鎿嶄綔"
align="center"
- width="200"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
@@ -214,25 +246,7 @@
@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
+ ><i class="el-icon-edit-outline"></i>鍐嶆鍙戦��</span
></el-button
>
</template>
@@ -466,7 +480,6 @@
components: { Treeselect },
data() {
return {
- topactiveName: "Local", //椤堕儴閫夋嫨
// 閬僵灞�
loading: false,
// 閫変腑鏁扮粍
@@ -479,6 +492,7 @@
showSearch: true,
// 鎬绘潯鏁�
total: 0,
+ classestag: 1, //绫诲埆鏍囪瘑
namequestionnaire: "",
haoquestionnaire: "",
idds: "",
@@ -643,68 +657,9 @@
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() {},
+ // const { pageNum, pageSize, ...params } = this.queryParams;
+ submitsidecolumn() {},
+ deletefenlei() {},
// 渚挎嵎鏍囩
tsgnameto() {},
// 鍒囨崲鍏变韩/鏈湴
@@ -754,9 +709,7 @@
},
/** 鏂板鎸夐挳鎿嶄綔 */
handleAdd() {
- this.reset();
- this.title = "鏂板鐭俊";
- this.indexopen = true;
+ this.$router.push("/shortmessage/messagebank/compile/");
},
/** 淇敼鎸夐挳鎿嶄綔 */
handleUpdate(row) {
@@ -805,6 +758,22 @@
})
.catch(() => {});
},
+ // 鍒囨崲鍏ㄩ儴绫诲埆
+ completefn() {
+ this.classestag = 1;
+ },
+ // 鍒囨崲鎴愬姛绫诲埆
+ succeedfn() {
+ this.classestag = 2;
+ },
+ // 鍒囨崲澶辫触绫诲埆
+ losefn() {
+ this.classestag = 3;
+ },
+ // 鍒囨崲寰呭彂閫佺被鍒�
+ awaitfn() {
+ this.classestag = 4;
+ },
},
};
</script>
@@ -814,60 +783,95 @@
display: flex;
}
.sidecolumn {
- width: 300px;
+ width: 350px;
min-height: 100vh;
text-align: center;
// display: flex;
margin-top: 20px;
margin: 20px;
- padding: 30px;
- background: #edf1f7;
+ padding: 10px;
+ padding-top: 20px;
+ text-align: center;
+ background: #dfeffd;
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;
+ .notebuttom {
+ height: 35px;
+ background: #85c046;
+ color: #ffff;
+ font-size: 20px;
+ line-height: 35px;
+ cursor: pointer;
+ border-radius: 3px;
+ }
+ .notestate {
+ font-size: 20px;
+ .state-text {
+ height: 40px;
}
- .top-tj {
- font-size: 18px;
-
- color: rgb(0, 89, 255);
+ .state-line {
+ display: flex;
+ height: 40px;
+ align-items: center;
+ padding: 10px 10px;
cursor: pointer;
+ justify-content: space-between;
}
- }
- .center-ss {
- margin-top: 30px;
- .input-with-select {
- height: 40px !important;
+ .state-lines {
+ display: flex;
+ height: 40px;
+ align-items: center;
+ padding: 10px 10px;
+ background: #88abfc;
+ color: #fff;
+ cursor: pointer;
+ justify-content: space-between;
}
- }
- .bottom-fl {
- margin-top: 30px;
- display: center !important;
+ .state-line:hover {
+ background: #88abfc;
+ }
+ .quantityq {
+ height: 30px;
+ line-height: 30px;
+ padding: 0 5px;
+ border-radius: 10px;
+ color: #fff;
+ background: #9eb8ff;
+ }
+ .quantitycg {
+ height: 30px;
+ line-height: 30px;
+ padding: 0 5px;
+ border-radius: 10px;
+ color: #fff;
+
+ background: #48cf2d;
+ }
+ .quantitysb {
+ height: 30px;
+ line-height: 30px;
+ padding: 0 5px;
+ border-radius: 10px;
+ color: #fff;
+
+ background: #ce513b;
+ }
+ .quantityd {
+ height: 30px;
+ line-height: 30px;
+ padding: 0 5px;
+ border-radius: 10px;
+ color: #fff;
+
+ background: #3fbff1;
+ }
}
}
-.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;
- }
+[class^="el-icon-"],
+[class*=" el-icon-"] {
+ font-weight: 600;
+ font-size: 20px;
}
.tsgname {
width: 90px;
diff --git a/src/views/system/label/index.vue b/src/views/system/label/index.vue
index 2f291ed..513af3e 100644
--- a/src/views/system/label/index.vue
+++ b/src/views/system/label/index.vue
@@ -637,7 +637,7 @@
// 鏍囩鐘舵�佷慨鏀�
handleStatusChange(row) {
console.log(row.isupload);
- let text = row.isupload === "0" ? "鍚敤" : "鍋滅敤";
+ let text = row.isupload == 0 ? "鍋滅敤" : "鍚敤";
this.$modal
.confirm('纭瑕�"' + text + '""' + row.tagname + '"鏍囩鍚楋紵')
.then(function () {
@@ -647,7 +647,7 @@
this.$modal.msgSuccess(text + "鎴愬姛");
})
.catch(function () {
- row.isupload = row.isupload === "0" ? "1" : "0";
+ row.isupload = row.isupload == 0 ? 1 : 0;
});
},
/** 鎼滅储鎸夐挳鎿嶄綔 */
diff --git a/src/views/tool/module/Editinterface.vue b/src/views/tool/module/Editinterface.vue
new file mode 100644
index 0000000..25b51e6
--- /dev/null
+++ b/src/views/tool/module/Editinterface.vue
@@ -0,0 +1,255 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn">
+ <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" v-model="filterText">
+ </el-input>
+
+ <el-tree
+ class="filter-tree"
+ :data="data"
+ :props="defaultProps"
+ default-expand-all
+ :filter-node-method="filterNode"
+ ref="tree"
+ >
+ <span class="custom-tree-node" slot-scope="{ node, data }">
+ <span>{{ node.label }}</span>
+ <span>
+ <el-button type="text" size="mini" @click="() => append(data)">
+ 鏂板瀛愮骇
+ </el-button>
+ <el-button
+ type="text"
+ size="mini"
+ @click="() => remove(node, data)"
+ >
+ 鍒犻櫎
+ </el-button>
+ </span>
+ </span>
+ </el-tree>
+ </div>
+ <!-- 涓儴鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="compile" v-for="item in list">
+ <div class="compile-title">
+ {{ item.name }}: <span>{{ item.uapiurl }}</span>
+ </div>
+ <div class="compile-value">
+ <div class="compile-min" v-for="itea in item.value">
+ <div>
+ <el-input v-model="itea.value" placeholder="鍏ュ弬娉ㄨВ"></el-input>
+ </div>
+ <div>
+ <el-input v-model="itea.name" placeholder="鍏ュ弬鍚�"></el-input>
+ </div>
+ <div @click="drawer = true">灞曞紑涓嬬骇</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <el-drawer
+ title="鎴戞槸浜岀骇"
+ direction="btt"
+ :visible.sync="drawer"
+ :with-header="false"
+ >
+ <div class="compile-value">
+ <div class="compile-min" v-for="itea in 6">
+ <div>
+ <el-input v-model="input" placeholder="鍏ュ弬娉ㄨВ"></el-input>
+ </div>
+ <div>
+ <el-input v-model="inputs" placeholder="鍏ュ弬鍚�"></el-input>
+ </div>
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+let id = 1000;
+export default {
+ name: "Editinterface",
+
+ watch: {
+ filterText(val) {
+ this.$refs.tree.filter(val);
+ },
+ },
+
+ data() {
+ const data = [
+ {
+ id: 1,
+ label: "鎮h�呮湇鍔′腑蹇�",
+ children: [
+ {
+ id: 4,
+ label: "鎮h�呭垪琛�",
+ },
+ {
+ id: 21,
+ label: "鎮h�呮湇鍔�",
+ },
+ ],
+ },
+ {
+ id: 2,
+ label: "涓�绾� 2",
+ children: [
+ {
+ id: 5,
+ label: "浜岀骇 2-1",
+ },
+ {
+ id: 6,
+ label: "浜岀骇 2-2",
+ },
+ ],
+ },
+ {
+ id: 3,
+ label: "涓�绾� 3",
+ children: [
+ {
+ id: 7,
+ label: "浜岀骇 3-1",
+ },
+ {
+ id: 8,
+ label: "浜岀骇 3-2",
+ },
+ ],
+ },
+ ];
+ return {
+ drawer: false,
+ input: "",
+ inputs: "",
+ // 鏌ヨ鍙傛暟
+ queryParams: {},
+ currentRow: null, //閫変腑琛屾暟鎹�
+ filterText: "",
+
+ data: JSON.parse(JSON.stringify(data)),
+ data: JSON.parse(JSON.stringify(data)),
+
+ defaultProps: {
+ children: "children",
+ label: "label",
+ },
+ list: [
+ {
+ id: "23",
+ name: "鑾峰彇鎮h�呭垪琛�",
+ uapiurl: "http://api",
+ value: [
+ { name: "children", value: "娉ㄨВ" },
+ { name: "childrenone", value: "娉ㄨВ涓�" },
+ { name: "childrentwo", value: "娉ㄨВ浜�" },
+ { name: "childrenthree", value: "娉ㄨВ涓�" },
+ ],
+ },
+ {
+ id: "13",
+ name: "鑾峰彇鎮h�呰鎯�",
+ uapiurl: "http://api/xqq",
+ value: [
+ { name: "children", value: "娉ㄨВ" },
+ { name: "childrenone", value: "娉ㄨВ涓�" },
+ { name: "childrentwo", value: "娉ㄨВ浜�" },
+ { name: "childrenthree", value: "娉ㄨВ涓�" },
+ { name: "childrenthree", value: "娉ㄨВ鍥�" },
+ ],
+ },
+ ],
+ };
+ },
+ watch: {},
+ created() {},
+
+ methods: {
+ filterNode(value, data) {
+ if (!value) return true;
+ return data.label.indexOf(value) !== -1;
+ },
+ append(data) {
+ const newChild = { id: id++, label: "瀛愮骇", children: [] };
+ if (!data.children) {
+ this.$set(data, "children", []);
+ }
+ data.children.push(newChild);
+ },
+
+ remove(node, data) {
+ const parent = node.parent;
+ const children = parent.data.children || parent.data;
+ const index = children.findIndex((d) => d.id === data.id);
+ children.splice(index, 1);
+ },
+ },
+};
+</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: 10px;
+ 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);
+}
+::v-deep .sidecolumn .el-tree {
+ margin-top: 30px;
+ background: none;
+}
+
+.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);
+ .compile {
+ border: 1px solid #dcdfe6;
+ padding: 15px;
+ margin-top: 10px;
+ }
+}
+.compile-value {
+ display: flex;
+ margin-top: 10px;
+
+ .compile-min {
+ border: 1px solid #dcdfe6;
+ width: 150px;
+ div {
+ padding: 5px;
+ text-align: center;
+ }
+ }
+}
+.compile-min div:nth-child(3) {
+ padding: 0;
+ margin: 5px;
+ background: bisque;
+ border-radius: 3px;
+}
+</style>
diff --git a/src/views/tool/module/classifyone.vue b/src/views/tool/module/classifyone.vue
new file mode 100644
index 0000000..ee9e073
--- /dev/null
+++ b/src/views/tool/module/classifyone.vue
@@ -0,0 +1,631 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn" v-if="Sidecontrol">
+ <div v-if="Typecontrol">
+ <div class="sidecolumn-top">
+ <div class="top-wj">绫诲瀷</div>
+ <div class="top-tj" @click="dialogFormVisible = true">+娣诲姞</div>
+ </div>
+ <div class="center-ss">
+ <el-input
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="sidecolumnval"
+ class="input-with-select"
+ size="medium "
+ >
+ <el-button
+ @click="sidecolumnss"
+ slot="append"
+ icon="el-icon-search"
+ ></el-button>
+ </el-input>
+ </div>
+ </div>
+
+ <div class="bottom-fl">
+ <el-tabs tab-position="right">
+ <el-tab-pane :label="`鍏ㄩ儴 (${numberlb})`"></el-tab-pane>
+ <el-tab-pane
+ class="tab-paness"
+ :key="item.title"
+ v-for="(item, index) in editableTabs"
+ >
+ <span slot="label">
+ {{
+ item.title + " (" + item.number + ")"
+ }}   <el-popover
+ placement="top-start"
+ width="100"
+ trigger="hover"
+ >
+ <div style="text-align: center">
+ <el-button type="text" @click="popoveramend(item)"
+ >淇敼</el-button
+ ><el-button type="text" @click="deletefenlei(item)"
+ ><span style="color: rgb(173, 55, 55)"
+ >鍒犻櫎</span
+ ></el-button
+ >
+ </div>
+ <i slot="reference" class="el-icon-share"></i> </el-popover
+ ></span>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ <!-- 涓儴鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="leftvlue-top" v-if="topactiveName">
+ <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
+ <el-tab-pane name="Local">
+ <span class="mulsz" slot="label">鏈湴搴� </span>
+ </el-tab-pane>
+ <el-tab-pane name="sharing">
+ <span class="mulsz" slot="label">鍏变韩搴� </span>
+ </el-tab-pane>
+ </el-tabs>
+ </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="閫傜敤鐤剧梾" prop="status">
+ <el-cascader
+ v-model="queryParams.status"
+ :options="optionss"
+ :props="propss"
+ clearable
+ ></el-cascader>
+ </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-table
+ v-loading="loading"
+ :data="userList"
+ :border="true"
+ highlight-current-row
+ @selection-change="handleSelectionChange"
+ @current-change="handleCurrentChange"
+ >
+ <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"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="閫傜敤鐤剧梾"
+ align="center"
+ key="aphonenumber"
+ prop="aphonenumber"
+ width="120"
+ /><el-table-column
+ label="鎻忚堪"
+ align="center"
+ key="bphonenumber"
+ prop="bphonenumber"
+ width="120"
+ />
+ <el-table-column
+ label="鏈�杩戠紪杈�"
+ align="center"
+ key="cphonenumber"
+ prop="cphonenumber"
+ width="120"
+ />
+ </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="open"
+ width="900px"
+ append-to-body
+ >
+ <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>
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="sidecolumn">
+ <h3>鎿嶄綔</h3>
+ <div>
+ <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-row>
+ <el-row :gutter="10">
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="medium"
+ :disabled="single"
+ @click="handleUpdate"
+ v-hasPermi="['system:user:remove']"
+ >淇敼</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-share"
+ size="medium"
+ :disabled="single"
+ @click="ViewQuestionnaire"
+ v-hasPermi="['system:user:remove']"
+ >鏌ョ湅</el-button
+ >
+ </el-col>
+ </el-row>
+ </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, delUser, addUser, updateUser } from "@/api/system/user";
+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: "", //鎺у埗鍙充晶鏁版嵁椤堕儴tab灞曠ず
+ loading: false, //閬僵灞�
+ Typecontrol: true, //渚ц竟绫诲瀷灞曠ず鎺у埗
+ Sidecontrol: true, //渚ц竟鏍戝睍绀烘帶鍒�
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鍗曚釜閫変腑
+ MultipleC: false,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ // 鎬绘潯鏁�
+ total: 0,
+ // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+
+ userList: [
+ {
+ userid: 1,
+ userName: "涓夊彿",
+ nickName: "1.2.4",
+ aphonenumber: "鍏宠妭鐐庣棁",
+ bphonenumber: "閲嶅害",
+ cphonenumber: "2022-12-12 ",
+ },
+ {
+ userid: 2,
+ userName: "涓�鍙�",
+ nickName: "1.2.4",
+ aphonenumber: "楂樿鍘�",
+ bphonenumber: "涓害",
+ cphonenumber: "2022-12-12 ",
+ },
+ {
+ userid: 3,
+ userName: "涓�鍙�",
+ nickName: "1.2.4",
+ aphonenumber: "楂樿鍘�",
+ bphonenumber: "涓害",
+ cphonenumber: "2022-12-12 ",
+ },
+ ],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず寮瑰嚭灞�
+ open: false,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ // 瑙掕壊閫夐」
+ roleOptions: [],
+ // 琛ㄥ崟鍙傛暟
+ form: {},
+ numberlb: 22,
+ numberlbs: 2,
+ sidecolumnform: {}, //娣诲姞绫诲埆琛ㄥ崟
+ sidecolumnval: "", //绫诲埆鎼滅储
+ propss: { multiple: true },
+ idds: "",
+ amendtag: false, //鏄惁淇敼绫诲埆
+ dialogFormVisible: false, //淇敼娣诲姞绫诲埆寮规
+ deleteVisible: false, //鍒嗙被鍒犻櫎寮规
+ deletefenl: "楂樿鍘�", //鍒犻櫎椤�
+ //绫诲埆琛ㄥ崟
+ classifyform: {
+ categoryname: "",
+ },
+ // 澶氶�夊垪琛�
+ optionss: [
+ {
+ value: 1,
+ label: "涓滃崡",
+ },
+ {
+ value: 2,
+ label: "瑗垮寳",
+ },
+ {
+ value: 3,
+ label: "浠ㄤ花浠�",
+ },
+ {
+ value: 4,
+ label: "鍏椋掗",
+ },
+ ],
+ //绫诲埆鍒楄〃
+ editableTabs: [
+ {
+ title: "鍒嗙被涓�",
+ number: "1",
+ },
+ {
+ title: "鍒嗙被浜�",
+ number: "2",
+ },
+ {
+ title: "鍒嗙被涓�",
+ number: "2",
+ },
+ {
+ title: "鍒嗙被鍥�",
+ number: "2",
+ },
+ {
+ title: "鍒嗙被浜�",
+ number: "2",
+ },
+ ],
+ // 鏌ヨ鍙傛暟
+ queryParams: {},
+ currentRow: null, //閫変腑琛屾暟鎹�
+ };
+ },
+ watch: {},
+ created() {
+ this.getList();
+ },
+
+ methods: {
+ /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
+ getList() {
+ // this.loading = true;
+ listUser().then((response) => {
+ console.log(response);
+ // this.userList = response.data;
+ // this.total = response.total;
+ // this.loading = false;
+ console.log(this.userList);
+ });
+ // const { rows } = await listUser();
+ // console.log(rows);
+ // this.list = rows;
+ },
+ // 閫変腑琛岃Е鍙�
+ handleCurrentChange(val) {
+ this.currentRow = val;
+ console.log(val);
+ },
+ // 娣诲姞銆佷慨鏀圭被鍒�
+ 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;
+ }
+ },
+ //鎼滅储绫诲埆
+ sidecolumnss() {},
+ // 鍒囨崲鍏变韩/鏈湴
+ tophandleClick() {},
+ // 淇敼鍙栨秷鎸夐挳
+ cancel() {
+ this.open = false;
+ this.reset();
+ },
+ // 琛ㄥ崟閲嶇疆
+ reset() {
+ this.form = {};
+ 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() {},
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate() {},
+ // 鏌ョ湅
+ ViewQuestionnaire() {},
+ /** 鏇存柊/淇敼鎻愪氦鎸夐挳 */
+ 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(() => {});
+ },
+ },
+};
+</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;
+}
+
+::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;
+ }
+}
+</style>
diff --git a/src/views/tool/module/classifythreea.vue b/src/views/tool/module/classifythreea.vue
new file mode 100644
index 0000000..d1c60c1
--- /dev/null
+++ b/src/views/tool/module/classifythreea.vue
@@ -0,0 +1,792 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn" v-if="Sidecontrol">
+ <div v-if="Typecontrol">
+ <div class="sidecolumn-top">
+ <div class="top-wj">绫诲瀷</div>
+ <div class="top-tj" @click="dialogFormVisible = true">+娣诲姞</div>
+ </div>
+ <div class="center-ss">
+ <el-input
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="sidecolumnval"
+ class="input-with-select"
+ size="medium "
+ >
+ <el-button
+ @click="sidecolumnss"
+ slot="append"
+ icon="el-icon-search"
+ ></el-button>
+ </el-input>
+ </div>
+ </div>
+
+ <div class="bottom-fl">
+ <el-tabs tab-position="right">
+ <el-tab-pane :label="`鍏ㄩ儴 (${numberlb})`"></el-tab-pane>
+ <el-tab-pane
+ class="tab-paness"
+ :key="item.title"
+ v-for="(item, index) in editableTabs"
+ >
+ <span slot="label">
+ {{
+ item.title + " (" + item.number + ")"
+ }}   <el-popover
+ placement="top-start"
+ width="100"
+ trigger="hover"
+ >
+ <div style="text-align: center">
+ <el-button type="text" @click="popoveramend(item)"
+ >淇敼</el-button
+ ><el-button type="text" @click="deletefenlei(item)"
+ ><span style="color: rgb(173, 55, 55)"
+ >鍒犻櫎</span
+ ></el-button
+ >
+ </div>
+ <i slot="reference" class="el-icon-share"></i> </el-popover
+ ></span>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ <!-- 涓儴鏁版嵁 -->
+ <div class="leftvlue">
+ <div class="leftvlue-top" v-if="topactiveName">
+ <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
+ <el-tab-pane name="Local">
+ <span class="mulsz" slot="label">鏈湴搴� </span>
+ </el-tab-pane>
+ <el-tab-pane name="sharing">
+ <span class="mulsz" slot="label">鍏变韩搴� </span>
+ </el-tab-pane>
+ </el-tabs>
+ </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="閫傜敤鐤剧梾" prop="status">
+ <el-cascader
+ v-model="queryParams.status"
+ :options="optionss"
+ :props="propss"
+ clearable
+ ></el-cascader>
+ </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-collapse v-model="activeNames">
+ <el-collapse-item title="涓�鍙疯〃鏍�" name="1">
+ <el-table
+ v-loading="loading"
+ :data="userList"
+ ref="singone"
+ :border="true"
+ highlight-current-row
+ @selection-change="handleSelectionChange"
+ @current-change="handleCurrentChange"
+ >
+ <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"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="閫傜敤鐤剧梾"
+ align="center"
+ key="aphonenumber"
+ prop="aphonenumber"
+ width="120"
+ /><el-table-column
+ label="鎻忚堪"
+ align="center"
+ key="bphonenumber"
+ prop="bphonenumber"
+ width="120"
+ />
+ <el-table-column
+ label="鏈�杩戠紪杈�"
+ align="center"
+ key="cphonenumber"
+ prop="cphonenumber"
+ width="120"
+ />
+ </el-table>
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+ </el-collapse-item>
+ <el-collapse-item title="浜屽彿琛ㄦ牸" name="2">
+ <el-table
+ v-loading="loading"
+ ref="singtwo"
+ :data="userListmax"
+ :border="true"
+ highlight-current-row
+ @selection-change="handleSelectiontwo"
+ @current-change="handleCurrenttwo"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column
+ label="搴忓彿"
+ align="center"
+ key="userids"
+ prop="userids"
+ />
+ <el-table-column
+ label="鍚嶇О"
+ align="center"
+ key="userName"
+ prop="userName"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="鐗堟湰"
+ align="center"
+ key="nickName"
+ prop="nickName"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="閫傜敤鐤剧梾"
+ align="center"
+ key="aphonenumber"
+ prop="aphonenumber"
+ width="120"
+ /><el-table-column
+ label="鎻忚堪"
+ align="center"
+ key="bphonenumber"
+ prop="bphonenumber"
+ width="120"
+ />
+ <el-table-column
+ label="鏈�杩戠紪杈�"
+ align="center"
+ key="cphonenumber"
+ prop="cphonenumber"
+ width="120"
+ />
+ </el-table>
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+ </el-collapse-item>
+ </el-collapse>
+ </el-col>
+ </el-row>
+
+ <!-- 娣诲姞鎴栦慨鏀归厤缃璇濇 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="open"
+ width="900px"
+ append-to-body
+ >
+ <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>
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="sidecolumn">
+ <h3>鎿嶄綔</h3>
+ <div>
+ <h5>涓�鍙疯〃</h5>
+ <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-row>
+ <el-row :gutter="10">
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="medium"
+ :disabled="single"
+ @click="handleUpdate"
+ v-hasPermi="['system:user:remove']"
+ >淇敼</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-share"
+ size="medium"
+ :disabled="single"
+ @click="ViewQuestionnaire"
+ v-hasPermi="['system:user:remove']"
+ >鏌ョ湅</el-button
+ >
+ </el-col>
+ </el-row>
+ </div>
+ <el-divider></el-divider>
+
+
+ <div>
+ <h5>浜屽彿琛�</h5>
+ <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="multipletwo"
+ @click="handleDelete"
+ v-hasPermi="['system:user:remove']"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+ </el-row>
+ <el-row :gutter="10">
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="medium"
+ :disabled="singletwo"
+ @click="handleUpdate"
+ v-hasPermi="['system:user:remove']"
+ >淇敼</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-share"
+ size="medium"
+ :disabled="singletwo"
+ @click="ViewQuestionnaire"
+ v-hasPermi="['system:user:remove']"
+ >鏌ョ湅</el-button
+ >
+ </el-col>
+ </el-row>
+ </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, delUser, addUser, updateUser } from "@/api/system/user";
+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: "", //鎺у埗鍙充晶鏁版嵁椤堕儴tab灞曠ず
+ loading: false, //閬僵灞�
+ Typecontrol: true, //渚ц竟绫诲瀷灞曠ず鎺у埗
+ Sidecontrol: true, //渚ц竟鏍戝睍绀烘帶鍒�
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ singletwo: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ multipletwo: true,
+
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ // 鎬绘潯鏁�
+ total: 2,
+ activeNames: ["1", "2"],
+ // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+ userList: [
+ {
+ userid: 1,
+ userName: "涓夊彿",
+ nickName: "1.2.4",
+ aphonenumber: "鍏宠妭鐐庣棁",
+ bphonenumber: "閲嶅害",
+ cphonenumber: "2022-12-12 ",
+ },
+ {
+ userid: 2,
+ userName: "涓�鍙�",
+ nickName: "1.2.4",
+ aphonenumber: "楂樿鍘�",
+ bphonenumber: "涓害",
+ cphonenumber: "2022-12-12 ",
+ },
+ ],
+ userListmax: [
+ {
+ userids: 1,
+ userName: "涓夊彿",
+ nickName: "1.2.4",
+ aphonenumber: "鍏宠妭鐐庣棁",
+ bphonenumber: "閲嶅害",
+ cphonenumber: "2022-12-12 ",
+ },
+ {
+ userids: 2,
+ userName: "涓�鍙�",
+ nickName: "1.2.4",
+ aphonenumber: "楂樿鍘�",
+ bphonenumber: "涓害",
+ cphonenumber: "2022-12-12 ",
+ },
+ {
+ userids: 2,
+ userName: "涓�鍙�",
+ nickName: "1.2.4",
+ aphonenumber: "楂樿鍘�",
+ bphonenumber: "涓害",
+ cphonenumber: "2022-12-12 ",
+ },
+ ],
+ // 寮瑰嚭灞傛爣棰�
+ title: "",
+ // 鏄惁鏄剧ず寮瑰嚭灞�
+ open: false,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ // 瑙掕壊閫夐」
+ roleOptions: [],
+ // 琛ㄥ崟鍙傛暟
+ form: {},
+ numberlb: 22,
+ numberlbs: 2,
+ sidecolumnform: {}, //娣诲姞绫诲埆琛ㄥ崟
+ sidecolumnval: "", //绫诲埆鎼滅储
+ propss: { multiple: true },
+ idds: "",
+ amendtag: false, //鏄惁淇敼绫诲埆
+ dialogFormVisible: false, //淇敼娣诲姞绫诲埆寮规
+ deleteVisible: false, //鍒嗙被鍒犻櫎寮规
+ deletefenl: "楂樿鍘�", //鍒犻櫎椤�
+ //绫诲埆琛ㄥ崟
+ classifyform: {
+ categoryname: "",
+ },
+ // 澶氶�夊垪琛�
+ optionss: [
+ {
+ value: 1,
+ label: "涓滃崡",
+ },
+ {
+ value: 2,
+ label: "瑗垮寳",
+ },
+ {
+ value: 3,
+ label: "浠ㄤ花浠�",
+ },
+ {
+ value: 4,
+ label: "鍏椋掗",
+ },
+ ],
+ //绫诲埆鍒楄〃
+ editableTabs: [
+ {
+ title: "鍒嗙被涓�",
+ number: "1",
+ },
+ {
+ title: "鍒嗙被浜�",
+ number: "2",
+ },
+ {
+ title: "鍒嗙被涓�",
+ number: "2",
+ },
+ {
+ title: "鍒嗙被鍥�",
+ number: "2",
+ },
+ {
+ title: "鍒嗙被浜�",
+ number: "2",
+ },
+ ],
+ // 鏌ヨ鍙傛暟
+ queryParams: {},
+ currentRow: null, //閫変腑琛屾暟鎹�
+ };
+ },
+ watch: {},
+ created() {
+ this.getList();
+ },
+
+ methods: {
+ /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
+ getList() {
+ // this.loading = true;
+ listUser().then((response) => {
+ console.log(response);
+ // this.userList = response.data;
+ // this.total = response.total;
+ // this.loading = false;
+ console.log(this.userList);
+ });
+ // const { rows } = await listUser();
+ // console.log(rows);
+ // this.list = rows;
+ },
+ // 涓�鍙疯〃閫変腑琛岃Е鍙�
+ handleCurrentChange(val) {
+ this.currentRow = val;
+ this.single = false;
+ this.multiple = false;
+ // 娓呴櫎闈炲綋鍓嶈〃鍗曢�変腑鐘舵��
+
+ // this.$refs.singtwo.setCurrentRow();
+ console.log(this.currentRow);
+
+ console.log(val);
+ },
+ handleCurrenttwo(val) {
+ this.currentRow = val;
+ this.singletwo = false;
+ this.multipletwo = false;
+ // 娓呴櫎闈炲綋鍓嶈〃鍗曢�変腑鐘舵��
+
+ // this.$refs.singone.setCurrentRow();
+ console.log(this.currentRow);
+ console.log(val);
+ },
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.userId);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ },
+ handleSelectiontwo(selection) {
+ this.ids = selection.map((item) => item.userId);
+ this.singletwo = selection.length != 1;
+ this.multipletwo = !selection.length;
+ },
+
+ // 娣诲姞銆佷慨鏀圭被鍒�
+ 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;
+ }
+ },
+ //鎼滅储绫诲埆
+ sidecolumnss() {},
+ // 鍒囨崲鍏变韩/鏈湴
+ tophandleClick() {},
+ // 淇敼鍙栨秷鎸夐挳
+ cancel() {
+ this.open = false;
+ this.reset();
+ },
+ // 琛ㄥ崟閲嶇疆
+ reset() {
+ this.form = {};
+ 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();
+ },
+
+ /** 鏂板鎸夐挳鎿嶄綔 */
+ handleAdd() {},
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate() {},
+ // 鏌ョ湅
+ ViewQuestionnaire() {},
+ /** 鏇存柊/淇敼鎻愪氦鎸夐挳 */
+ submitForm() {},
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+ 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;
+}
+
+::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-textck {
+ 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/tool/module/classifytwo.vue b/src/views/tool/module/classifytwo.vue
new file mode 100644
index 0000000..2b02583
--- /dev/null
+++ b/src/views/tool/module/classifytwo.vue
@@ -0,0 +1,177 @@
+<template>
+ <div class="Questionnairemanagement">
+ <!-- 宸︿晶鏍� -->
+ <div class="sidecolumn">
+ <div style="height: 400px">
+ <el-steps direction="vertical" :active="Editprogress">
+ <el-step title="绗竴姝�"></el-step>
+ <el-step title="绗簩姝�"></el-step>
+ <el-step
+ title="绗笁姝�"
+ description="杩欐槸涓�娈靛緢闀垮緢闀垮緢闀跨殑鎻忚堪鎬ф枃瀛�"
+ ></el-step>
+ <el-step
+ title="绗洓閮�"
+ description="杩欐槸涓�娈靛緢闀垮緢闀垮緢闀跨殑鎻忚堪鎬ф枃瀛�"
+ ></el-step>
+ </el-steps>
+ </div>
+ </div>
+ <!-- 鍙充晶鏁版嵁 -->
+ <div class="leftvlue">
+ <!-- 鍩烘湰淇℃伅 -->
+ <div v-if="Editprogress == 1">
+ <div class="leftvlue-jbxx">绗竴閮ㄥ垎</div>
+ <el-button type="success" @click="submitForm('ruleForm')"
+ >涓嬩竴姝�</el-button
+ >
+ <el-button @click="resetForm('ruleForm')">閲嶇疆</el-button>
+ </div>
+ <!-- 闂嵎璁剧疆 -->
+ <div v-if="Editprogress == 2">
+ <div class="leftvlue-jbxx">绗簩閮ㄥ垎</div>
+ <el-button type="success" @click="submitForm('ruleForm')"
+ >涓嬩竴姝�</el-button
+ >
+ <el-button type="primary" @click="laststep()">涓婁竴姝�</el-button>
+ <el-button @click="resetForm('ruleForm')">閲嶇疆</el-button>
+ </div>
+ <!-- 闂嵎棰勮 -->
+ <div v-if="Editprogress == 3">
+ <div class="leftvlue-jbxx">绗笁閮ㄥ垎</div>
+ <el-button type="success" @click="submitForm('ruleForm')"
+ >涓嬩竴姝�</el-button
+ >
+ <el-button type="primary" @click="laststep()">涓婁竴姝�</el-button>
+ <!-- <el-button @click="resetForm('ruleForm')">閲嶇疆</el-button> -->
+ </div>
+ <!-- 缁撴灉鍙嶉 -->
+ <div v-if="Editprogress == 4">
+ <div class="leftvlue-jbxx">绗洓閮ㄥ垎</div>
+ <el-button type="success" @click="submitForm('ruleForm')"
+ >绔嬪嵆鍒涘缓</el-button
+ >
+ <el-button type="primary" @click="laststep()">涓婁竴姝�</el-button>
+ <el-button @click="resetForm('ruleForm')">閲嶇疆</el-button>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ Editprogress: 1, //缂栬緫杩涘害
+ loading: false, // 閬僵灞�
+ };
+ },
+
+ created() {},
+
+ methods: {
+ // 涓嬩竴姝�
+ submitForm(formName) {
+ if (this.Editprogress <= 3) {
+ return this.Editprogress++;
+ }
+ // 鎻愪氦
+ // this.$refs[formName].validate((valid, object) => {
+ // if (valid) {
+ // alert("submit!");
+ // } else {
+ // console.log("error submit!!", object);
+ // return false;
+ // }
+ // });
+ },
+ // 涓婁竴姝�
+ laststep() {
+ this.Editprogress--;
+ },
+ // 鎻愪氦琛ㄥ崟
+ resetForm(formName) {
+ this.$refs[formName].resetFields();
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.Questionnairemanagement {
+ display: flex;
+}
+.sidecolumn {
+ width: 300px;
+ min-height: 100vh;
+ text-align: center;
+ // display: flex;
+ // margin-top: 20px;
+ margin: 20px;
+ margin-bottom: 0;
+ 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);
+}
+.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);
+ .leftvlue-jbxx {
+ margin-bottom: 50px;
+ font-size: 20px;
+ span {
+ position: absolute;
+ right: 80px;
+ }
+ }
+}
+::v-deep .addtopic-input {
+ input {
+ background: #02a7f0;
+ color: #edf1f7;
+ width: 150px;
+ }
+}
+::v-deep.el-step.is-vertical .el-step__title {
+ font-size: 25px;
+}
+::v-deep.el-input--medium {
+ font-size: 24px !important;
+}
+::v-deep.ruleFormaa.el-select {
+ display: inline-block;
+ position: relative;
+ width: 700px;
+}
+.el-select__tags {
+ font-size: 20px;
+ max-width: 888px !important;
+}
+::v-deep.el-radio__inner {
+ width: 22px;
+ height: 22px;
+}
+// ::v-deep.topic-dev.el-radio__label {
+// font-size: 24px;
+// }
+::v-deep.el-radio-group {
+ span {
+ font-size: 24px;
+ }
+}
+::v-deep.el-checkbox-group {
+ span {
+ font-size: 24px;
+ }
+}
+</style>
diff --git a/src/websocket/lemon-message-voice.vue b/src/websocket/lemon-message-voice.vue
new file mode 100644
index 0000000..da978a9
--- /dev/null
+++ b/src/websocket/lemon-message-voice.vue
@@ -0,0 +1,31 @@
+<script>
+export default {
+ name: "lemonMessageVoice",
+ inheritAttrs: false,
+ inject: ["IMUI"],
+ render(h) {
+ return h("lemon-message-basic", {
+ class: "lemon-message-voice",
+ props: { ...this.$attrs, avatar: "default-avatar-url" }, // Provide a default value for avatar
+ scopedSlots: {
+ content: (props) => {
+ return h("span", [props.content, "\u00A0馃攬"]);
+ },
+ },
+ });
+ },
+};
+</script>
+<style lang="scss">
+.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/websocket/websocket.js b/src/websocket/websocket.js
index d7090e8..a7e337b 100644
--- a/src/websocket/websocket.js
+++ b/src/websocket/websocket.js
@@ -16,13 +16,13 @@
* 鍙戣捣websocket杩炴帴
* @param {Object} agentData 闇�瑕佸悜鍚庡彴浼犻�掔殑鍙傛暟鏁版嵁
*/
-function websocketSend (agentData) {
+export function websocketSend (agentData) {
// 鍔犲欢杩熸槸涓轰簡灏介噺璁﹚s杩炴帴鐘舵�佸彉涓篛PEN
setTimeout(() => {
// 娣诲姞鐘舵�佸垽鏂紝褰撲负OPEN鏃讹紝鍙戦�佹秷鎭�
if (websock.readyState === websock.OPEN) { // websock.OPEN = 1
// 鍙戠粰鍚庣鐨勬暟鎹渶瑕佸瓧绗︿覆鍖�
- websock.send(JSON.stringify(agentData))
+ websock.send(agentData)
console.log('杩炴帴鎴愬姛');
}
if (websock.readyState === websock.CLOSED) { // websock.CLOSED = 3
diff --git a/vue.config.js b/vue.config.js
index 311eeab..ce7adcf 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -37,6 +37,7 @@
[process.env.VUE_APP_BASE_API]: {
target1: `http://192.168.1.4:8080`,
target: `http://192.168.1.4:8080`,
+ // target: `http://www.hxsoft.com:8080`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
@@ -129,7 +130,7 @@
config.optimization.runtimeChunk('single'),
{
from: path.resolve(__dirname, './public/robots.txt'), //闃茬埇铏枃浠�
- to: './' //鍒版牴鐩綍涓�
+ to: '/' //鍒版牴鐩綍涓�
}
}
)
--
Gitblit v1.9.3