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