安装echarts5.4.0依赖,完整患者管理主页面及其个人信息及附属页面基础开发
| | |
| | | "core-js": "3.25.3", |
| | | "cos-js-sdk-v5": "^1.4.18", |
| | | "dayjs": "^1.11.7", |
| | | "echarts": "5.4.0", |
| | | "echarts": "^5.4.2", |
| | | "element-ui": "2.15.12", |
| | | "file-saver": "^2.0.5", |
| | | "fuse.js": "6.4.3", |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | // å¾
å® |
| | | import { scrollTo } from '@/utils/scroll-to' |
| | | |
| | | export default { |
| | |
| | | props: { |
| | | showSearch: { |
| | | type: Boolean, |
| | | default: true, |
| | | default: true, //requiredæ¯å¦å¿
é¡»ï¼ä¸ºtrueæ¸²ææ¶ä¼æåºtypeErrorï¼defaultï¼é»è®¤å¼ï¼ |
| | | }, |
| | | columns: { |
| | | type: Array, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export const imgError = { |
| | | // å½è¢«ç»å®çå
ç´ æå
¥å°DOMä¸ |
| | | inserted: function (el, { value }) { |
| | | // çå¬img/srcæ¾ç¤ºå¤±è´¥æ
åµ |
| | | if (!el.src) { |
| | | el.src = value |
| | | } else { |
| | | // èç¦ |
| | | el.onerror = function () { |
| | | el.src = value |
| | | } |
| | | } |
| | | }, |
| | | // æä»¤ç»å®çå
ç´ æ´æ°æ¶çæ |
| | | updated(el,{ value}) { |
| | | if (!el.src) { |
| | | el.src=value |
| | | } |
| | | }, |
| | | } |
| | | export const aa = {} |
| | | export const bb = {} |
| | |
| | | import Vue from 'vue' |
| | | |
| | | import Cookies from 'js-cookie' |
| | | import * as echarts from "echarts"; |
| | | |
| | | import Element from 'element-ui' |
| | | import './assets/styles/element-variables.scss' |
| | |
| | | // ç»ä»¶å°è£
éæ |
| | | import components from './components' |
| | | // 注åè¿æ»¤å¨ |
| | | // èªå®ä¹æä»¤ |
| | | import * as directives from './directives' |
| | | import * as filters from './filters' |
| | | for(let key in filters){ |
| | | Vue.filter(key, filters[key]) |
| | | } |
| | | |
| | | |
| | | // å
¨å±æ¹æ³æè½½ |
| | | |
| | | Vue.prototype.getDicts = getDicts |
| | | Vue.prototype.getConfigKey = getConfigKey |
| | | Vue.prototype.parseTime = parseTime |
| | |
| | | Vue.prototype.selectDictLabels = selectDictLabels |
| | | Vue.prototype.download = download |
| | | Vue.prototype.handleTree = handleTree |
| | | |
| | | // å
¨å±ç»ä»¶æè½½ |
| | | Vue.component('DictTag', DictTag) |
| | | Vue.component('Pagination', Pagination) |
| | |
| | | Vue.component('ImageUpload', ImageUpload) |
| | | Vue.component('ImagePreview', ImagePreview) |
| | | |
| | | |
| | | // å°è£
èªå®ä¹æä»¤ |
| | | for(let key in directives) |
| | | Vue.directive(key, directives[key]) |
| | | Vue.use(directive) |
| | | Vue.use(plugins) |
| | | Vue.use(VueMeta) |
| | |
| | | <script> |
| | | import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job"; |
| | | import Crontab from '@/components/Crontab' |
| | | import * as echarts from "echarts"; |
| | | |
| | | |
| | | export default { |
| | | components: { Crontab }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <h4 class="form-header h4">åºæ¬ä¿¡æ¯</h4> |
| | | <el-form ref="form" :model="form" label-width="80px"> |
| | | <el-row> |
| | | <el-col :span="8" :offset="2"> |
| | | <el-form-item label="ç¨æ·æµç§°" prop="nickName"> |
| | | <el-input v-model="form.nickName" disabled /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8" :offset="2"> |
| | | <el-form-item label="ç»å½è´¦å·" prop="userName"> |
| | | <el-input v-model="form.userName" disabled /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | |
| | | <h4 class="form-header h4">è§è²ä¿¡æ¯</h4> |
| | | <el-table v-loading="loading" :row-key="getRowKey" @row-click="clickRow" ref="table" @selection-change="handleSelectionChange" :data="roles.slice((pageNum-1)*pageSize,pageNum*pageSize)"> |
| | | <el-table-column label="åºå·" type="index" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column> |
| | | <el-table-column label="è§è²ç¼å·" align="center" prop="roleId" /> |
| | | <el-table-column label="è§è²åç§°" align="center" prop="roleName" /> |
| | | <el-table-column label="æéå符" align="center" prop="roleKey" /> |
| | | <el-table-column label="å建æ¶é´" align="center" prop="createTime" width="180"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" /> |
| | | |
| | | <el-form label-width="100px"> |
| | | <el-form-item style="text-align: center;margin-left:-120px;margin-top:30px;"> |
| | | <el-button type="primary" @click="submitForm()">æäº¤</el-button> |
| | | <el-button @click="close()">è¿å</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getAuthRole, updateAuthRole } from "@/api/system/user"; |
| | | |
| | | export default { |
| | | name: "AuthRole", |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | | loading: true, |
| | | // åé¡µä¿¡æ¯ |
| | | total: 0, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | // éä¸è§è²ç¼å· |
| | | roleIds:[], |
| | | // è§è²ä¿¡æ¯ |
| | | roles: [], |
| | | // ç¨æ·ä¿¡æ¯ |
| | | form: {} |
| | | }; |
| | | }, |
| | | created() { |
| | | const userId = this.$route.params && this.$route.params.userId; |
| | | if (userId) { |
| | | this.loading = true; |
| | | getAuthRole(userId).then((response) => { |
| | | this.form = response.user; |
| | | this.roles = response.roles; |
| | | this.total = this.roles.length; |
| | | this.$nextTick(() => { |
| | | this.roles.forEach((row) => { |
| | | if (row.flag) { |
| | | this.$refs.table.toggleRowSelection(row); |
| | | } |
| | | }); |
| | | }); |
| | | this.loading = false; |
| | | }); |
| | | } |
| | | }, |
| | | methods: { |
| | | /** åå»éä¸è¡æ°æ® */ |
| | | clickRow(row) { |
| | | this.$refs.table.toggleRowSelection(row); |
| | | }, |
| | | // å¤éæ¡é䏿°æ® |
| | | handleSelectionChange(selection) { |
| | | this.roleIds = selection.map((item) => item.roleId); |
| | | }, |
| | | // ä¿åéä¸çæ°æ®ç¼å· |
| | | getRowKey(row) { |
| | | return row.roleId; |
| | | }, |
| | | /** æäº¤æé® */ |
| | | submitForm() { |
| | | const userId = this.form.userId; |
| | | const roleIds = this.roleIds.join(","); |
| | | updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => { |
| | | this.$modal.msgSuccess("æææå"); |
| | | this.close(); |
| | | }); |
| | | }, |
| | | /** å
³éæé® */ |
| | | close() { |
| | | const obj = { path: "/system/user" }; |
| | | this.$tab.closeOpenPage(obj); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-row :gutter="20"> |
| | | <!--é¨é¨æ°æ®--> |
| | | <!-- <el-col :span="4" :xs="24"> |
| | | <div class="head-container"> |
| | | <el-input |
| | | v-model="deptName" |
| | | placeholder="请è¾å
¥é¨é¨åç§°" |
| | | clearable |
| | | size="small" |
| | | prefix-icon="el-icon-search" |
| | | style="margin-bottom: 20px" |
| | | /> |
| | | </div> |
| | | <div class="head-container"> |
| | | <el-tree |
| | | :data="deptOptions" |
| | | :props="defaultProps" |
| | | :expand-on-click-node="false" |
| | | :filter-node-method="filterNode" |
| | | ref="tree" |
| | | node-key="id" |
| | | default-expand-all |
| | | highlight-current |
| | | @node-click="handleNodeClick" |
| | | /> |
| | | </div> |
| | | </el-col> --> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <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="IDnumber"> |
| | | <el-input |
| | | v-model="queryParams.IDnumber" |
| | | placeholder="请è¾å
¥èº«ä»½è¯å·ç " |
| | | clearable |
| | | style="width: 250px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="èç³»æ¹å¼" prop="phonenumber"> |
| | | <el-input |
| | | v-model="queryParams.phonenumber" |
| | | placeholder="请è¾å
¥èç³»æ¹å¼" |
| | | clearable |
| | | style="width: 280px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-row> |
| | | <el-form-item label="æ£è
æ ç¾" prop="status"> |
| | | <el-cascader |
| | | v-model="queryParams.status" |
| | | :options="optionss" |
| | | :props="propss" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | </el-row> |
| | | |
| | | <!-- <el-form-item label="å建æ¶é´"> |
| | | <el-date-picker |
| | | v-model="dateRange" |
| | | style="width: 240px" |
| | | value-format="yyyy-MM-dd" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery">æç´¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="medium" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | |
| | | <el-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="info" |
| | | plain |
| | | icon="el-icon-upload2" |
| | | size="medium" |
| | | @click="handleImport" |
| | | v-hasPermi="['system:user:import']" |
| | | >导å
¥</el-button |
| | | > |
| | | </div> |
| | | <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" |
| | | v-if="columns[0].visible" |
| | | /> |
| | | <el-table-column |
| | | label="å§å" |
| | | align="center" |
| | | key="userName" |
| | | prop="userName" |
| | | v-if="columns[1].visible" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="æ§å«" |
| | | align="center" |
| | | key="nickName" |
| | | prop="nickName" |
| | | v-if="columns[2].visible" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="æ£è
æ ç¾" |
| | | align="center" |
| | | key="deptName" |
| | | prop="dept.deptName" |
| | | v-if="columns[3].visible" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="è¯ä»¶ç±»å" |
| | | align="center" |
| | | key="phonenumber" |
| | | prop="phonenumber" |
| | | v-if="columns[4].visible" |
| | | width="120" |
| | | /><el-table-column |
| | | label="è¯ä»¶å·ç " |
| | | align="center" |
| | | key="phonenumber" |
| | | prop="phonenumber" |
| | | v-if="columns[4].visible" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="å¹´é¾" |
| | | align="center" |
| | | key="phonenumber" |
| | | prop="phonenumber" |
| | | v-if="columns[4].visible" |
| | | width="120" |
| | | /> |
| | | <!-- <el-table-column |
| | | label="ç¶æ" |
| | | align="center" |
| | | key="status" |
| | | v-if="columns[5].visible" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-switch |
| | | v-model="scope.row.status" |
| | | active-value="0" |
| | | inactive-value="1" |
| | | @change="handleStatusChange(scope.row)" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> --> |
| | | |
| | | <el-table-column |
| | | label="èç³»æ¹å¼" |
| | | align="center" |
| | | key="phonenumber" |
| | | prop="phonenumber" |
| | | v-if="columns[4].visible" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="å»ºæ¡£æ¥æ" |
| | | align="center" |
| | | prop="createTime" |
| | | v-if="columns[6].visible" |
| | | width="160" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æ´æ°æ¥æ" |
| | | align="center" |
| | | prop="createTime" |
| | | v-if="columns[6].visible" |
| | | 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="$router.push('/patient/patient/profile/')" |
| | | v-hasPermi="['system:user:edit']" |
| | | >æ¥ç</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- æ·»å æä¿®æ¹ç¨æ·é
ç½®å¯¹è¯æ¡ --> |
| | | <el-dialog :title="title" :visible.sync="open" 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.sex" placeholder="è¯·éæ©æ§å«"> |
| | | <el-option |
| | | v-for="dict in dict.type.sys_user_sex" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯ä»¶ç±»å" prop="phonenumber"> |
| | | <el-input |
| | | v-model="form.phonenumber" |
| | | placeholder="è¯·éæ©è¯ä»¶ç±»å" |
| | | maxlength="11" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯ä»¶å·" prop="email"> |
| | | <el-input |
| | | v-model="form.email" |
| | | placeholder="请è¾å
¥è¯ä»¶å·" |
| | | maxlength="50" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¬äººææºå·" prop="userName"> |
| | | <el-input |
| | | v-model="form.userName" |
| | | placeholder="请è¾å
¥ææºå·" |
| | | maxlength="30" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="äº²å±ææºå·" prop="password"> |
| | | <el-input |
| | | v-model="form.password" |
| | | placeholder="请è¾å
¥äº²å±ææºå·" |
| | | type="password" |
| | | maxlength="20" |
| | | show-password |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ£è
æ ç¾"> |
| | | <!-- <el-select v-model="form.sex" placeholder="è¯·éæ©"> --> |
| | | <el-cascader |
| | | :options="optionss" |
| | | :props="propss" |
| | | clearable |
| | | ></el-cascader> |
| | | <!-- </el-select> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col :span="12"> |
| | | <el-form-item label="ç¶æ"> |
| | | <el-radio-group v-model="form.status"> |
| | | <el-radio |
| | | v-for="dict in dict.type.sys_normal_disable" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{ dict.label }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> --> |
| | | </el-row> |
| | | <!-- <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å²ä½"> |
| | | <el-select |
| | | v-model="form.postIds" |
| | | multiple |
| | | placeholder="è¯·éæ©å²ä½" |
| | | > |
| | | <el-option |
| | | v-for="item in postOptions" |
| | | :key="item.postId" |
| | | :label="item.postName" |
| | | :value="item.postId" |
| | | :disabled="item.status == 1" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è§è²"> |
| | | <el-select |
| | | v-model="form.roleIds" |
| | | multiple |
| | | placeholder="è¯·éæ©è§è²" |
| | | > |
| | | <el-option |
| | | v-for="item in roleOptions" |
| | | :key="item.roleId" |
| | | :label="item.roleName" |
| | | :value="item.roleId" |
| | | :disabled="item.status == 1" |
| | | ></el-option> |
| | | </el-select> |
| | | </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 |
| | | :title="upload.title" |
| | | :visible.sync="upload.open" |
| | | width="400px" |
| | | append-to-body |
| | | > |
| | | <el-upload |
| | | ref="upload" |
| | | :limit="1" |
| | | accept=".xlsx, .xls" |
| | | :headers="upload.headers" |
| | | :action="upload.url + '?updateSupport=' + upload.updateSupport" |
| | | :disabled="upload.isUploading" |
| | | :on-progress="handleFileUploadProgress" |
| | | :on-success="handleFileSuccess" |
| | | :auto-upload="false" |
| | | drag |
| | | > |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text">å°æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em></div> |
| | | <div class="el-upload__tip text-center" slot="tip"> |
| | | <div class="el-upload__tip" slot="tip"> |
| | | <el-checkbox v-model="upload.updateSupport" /> |
| | | æ¯å¦æ´æ°å·²ç»åå¨çç¨æ·æ°æ® |
| | | </div> |
| | | <span>ä»
å
许导å
¥xlsãxlsxæ ¼å¼æä»¶ã</span> |
| | | <el-link |
| | | type="primary" |
| | | :underline="false" |
| | | style="font-size: 12px; vertical-align: baseline" |
| | | @click="importTemplate" |
| | | >ä¸è½½æ¨¡æ¿</el-link |
| | | > |
| | | </div> |
| | | </el-upload> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitFileForm">ç¡® å®</el-button> |
| | | <el-button @click="upload.open = false">å æ¶</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | listUser, |
| | | getUser, |
| | | delUser, |
| | | addUser, |
| | | updateUser, |
| | | resetUserPwd, |
| | | changeUserStatus, |
| | | deptTreeSelect, |
| | | } from "@/api/system/user"; |
| | | import { getToken } from "@/utils/auth"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | export default { |
| | | name: "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: "", |
| | | // é¨é¨æ é项 |
| | | deptOptions: undefined, |
| | | // æ¯å¦æ¾ç¤ºå¼¹åºå± |
| | | open: false, |
| | | // é¨é¨åç§° |
| | | deptName: undefined, |
| | | // é»è®¤å¯ç |
| | | initPassword: undefined, |
| | | // æ¥æèå´ |
| | | dateRange: [], |
| | | // å²ä½é项 |
| | | postOptions: [], |
| | | // è§è²é项 |
| | | roleOptions: [], |
| | | // 表ååæ° |
| | | form: {}, |
| | | propss: { multiple: true }, |
| | | optionss: [ |
| | | { |
| | | value: 1, |
| | | label: "ä¸å", |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: "西å", |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "仨仨仨", |
| | | }, |
| | | { |
| | | value: 4, |
| | | label: "å
é£é£é£", |
| | | }, |
| | | ], |
| | | defaultProps: { |
| | | children: "children", |
| | | label: "label", |
| | | }, |
| | | // ç¨æ·å¯¼å
¥åæ° |
| | | upload: { |
| | | // æ¯å¦æ¾ç¤ºå¼¹åºå±ï¼ç¨æ·å¯¼å
¥ï¼ |
| | | open: false, |
| | | // å¼¹åºå±æ é¢ï¼ç¨æ·å¯¼å
¥ï¼ |
| | | title: "", |
| | | // æ¯å¦ç¦ç¨ä¸ä¼ |
| | | isUploading: false, |
| | | // æ¯å¦æ´æ°å·²ç»åå¨çç¨æ·æ°æ® |
| | | updateSupport: 0, |
| | | // 设置ä¸ä¼ ç请æ±å¤´é¨ |
| | | headers: { Authorization: "Bearer " + getToken() }, |
| | | // ä¸ä¼ çå°å |
| | | url: process.env.VUE_APP_BASE_API + "/system/user/importData", |
| | | }, |
| | | // æ¥è¯¢åæ° |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | userName: undefined, |
| | | phonenumber: undefined, |
| | | status: undefined, |
| | | deptId: undefined, |
| | | IDnumber: 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: { |
| | | // æ ¹æ®åç§°çéé¨é¨æ |
| | | deptName(val) { |
| | | this.$refs.tree.filter(val); |
| | | }, |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | this.getDeptTree(); |
| | | this.getConfigKey("sys.user.initPassword").then((response) => { |
| | | this.initPassword = response.msg; |
| | | }); |
| | | }, |
| | | methods: { |
| | | /** æ¥è¯¢ç¨æ·å表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | listUser(this.addDateRange(this.queryParams, this.dateRange)).then( |
| | | (response) => { |
| | | this.userList = response.rows; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | } |
| | | ); |
| | | }, |
| | | /** æ¥è¯¢é¨é¨ä¸ææ ç»æ */ |
| | | getDeptTree() { |
| | | deptTreeSelect().then((response) => { |
| | | this.deptOptions = response.data; |
| | | }); |
| | | }, |
| | | // çéèç¹ |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | return data.label.indexOf(value) !== -1; |
| | | }, |
| | | // èç¹åå»äºä»¶ |
| | | handleNodeClick(data) { |
| | | this.queryParams.deptId = data.id; |
| | | this.handleQuery(); |
| | | }, |
| | | // ç¨æ·ç¶æä¿®æ¹ |
| | | 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.open = false; |
| | | this.reset(); |
| | | }, |
| | | // 表åéç½® |
| | | reset() { |
| | | this.form = { |
| | | userId: undefined, |
| | | deptId: undefined, |
| | | userName: undefined, |
| | | nickName: undefined, |
| | | password: undefined, |
| | | phonenumber: undefined, |
| | | email: undefined, |
| | | sex: undefined, |
| | | status: "0", |
| | | remark: undefined, |
| | | postIds: [], |
| | | roleIds: [], |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | /** æç´¢æé®æä½ */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.resetForm("queryForm"); |
| | | this.queryParams.deptId = undefined; |
| | | this.$refs.tree.setCurrentKey(null); |
| | | this.handleQuery(); |
| | | }, |
| | | // å¤éæ¡é䏿°æ® |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map((item) => item.userId); |
| | | this.single = selection.length != 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | // æ´å¤æä½è§¦å |
| | | handleCommand(command, row) { |
| | | switch (command) { |
| | | case "handleResetPwd": |
| | | this.handleResetPwd(row); |
| | | break; |
| | | case "handleAuthRole": |
| | | this.handleAuthRole(row); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | }, |
| | | /** æ°å¢æé®æä½ */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | getUser().then((response) => { |
| | | this.postOptions = response.posts; |
| | | this.roleOptions = response.roles; |
| | | this.open = 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.open = 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(() => {}); |
| | | }, |
| | | /** åé
è§è²æä½ */ |
| | | handleAuthRole: function (row) { |
| | | const userId = row.userId; |
| | | this.$router.push("/system/user-auth/role/" + userId); |
| | | }, |
| | | /** æäº¤æé® */ |
| | | 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.queryParams, |
| | | }, |
| | | `user_${new Date().getTime()}.xlsx` |
| | | ); |
| | | }, |
| | | /** 导å
¥æé®æä½ */ |
| | | handleImport() { |
| | | this.upload.title = "ç¨æ·å¯¼å
¥"; |
| | | this.upload.open = true; |
| | | }, |
| | | /** ä¸è½½æ¨¡æ¿æä½ */ |
| | | importTemplate() { |
| | | this.download( |
| | | "system/user/importTemplate", |
| | | {}, |
| | | `user_template_${new Date().getTime()}.xlsx` |
| | | ); |
| | | }, |
| | | // æä»¶ä¸ä¼ ä¸å¤ç |
| | | handleFileUploadProgress(event, file, fileList) { |
| | | this.upload.isUploading = true; |
| | | }, |
| | | // æä»¶ä¸ä¼ æåå¤ç |
| | | handleFileSuccess(response, file, fileList) { |
| | | this.upload.open = false; |
| | | this.upload.isUploading = false; |
| | | this.$refs.upload.clearFiles(); |
| | | this.$alert( |
| | | "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + |
| | | response.msg + |
| | | "</div>", |
| | | "导å
¥ç»æ", |
| | | { dangerouslyUseHTMLString: true } |
| | | ); |
| | | this.getList(); |
| | | }, |
| | | // æäº¤ä¸ä¼ æä»¶ |
| | | submitFileForm() { |
| | | this.$refs.upload.submit(); |
| | | }, |
| | | }, |
| | | }; |
| | | </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; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="4" :xs="24"> |
| | | <el-card class="box-card"> |
| | | <!-- <div slot="header" class="clearfix"> |
| | | <span>个人信æ¯</span> |
| | | </div> --> |
| | | <div class="personage"> |
| | | <div class="text-center"> |
| | | <img v-imgError="require('@/assets/common/head.jpg')" src="" /> |
| | | </div> |
| | | <div class="information"> |
| | | <div class="info-xx"> |
| | | å´é¾ |
| | | <div class="xinz-inf">+æ°å¢æ ç¾</div> |
| | | </div> |
| | | <div class="info-xx">ç·<span>66å²</span></div> |
| | | <div class="info-xx">13803963330</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="18" :xs="24"> |
| | | <el-tabs |
| | | type="border-card" |
| | | v-model="activeName" |
| | | @tab-click="handleClick" |
| | | > |
| | | <el-tab-pane name="health"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-date"></i> å¥åº·æ¡£æ¡</span |
| | | > |
| | | åºæ¬ä¿¡æ¯ |
| | | </el-tab-pane> |
| | | <el-tab-pane name="medical"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-management"></i> å»çæ¡£æ¡</span |
| | | > |
| | | <el-tabs v-model="sonactiveName" @tab-click="handleClick"> |
| | | <el-tab-pane name="outpatient" |
| | | ><span class="mulsz" slot="label" |
| | | >é¨è¯({{ mznumber }})</span |
| | | ></el-tab-pane |
| | | > |
| | | <el-tab-pane name="inhospital" |
| | | ><span class="mulsz" slot="label" |
| | | >ä½é¢({{ zynumber }}) |
| | | </span></el-tab-pane |
| | | > |
| | | <el-tab-pane name="checkout" |
| | | ><span class="mulsz" slot="label" |
| | | >æ£éª({{ jynumber }}) |
| | | </span></el-tab-pane |
| | | > |
| | | <el-tab-pane name="examine" |
| | | ><span class="mulsz" slot="label" |
| | | >æ£æ¥({{ jcnumber }}) |
| | | </span></el-tab-pane |
| | | > |
| | | <el-tab-pane name="physical" |
| | | ><span class="mulsz" slot="label"> |
| | | 使£({{ tjnumber }})</span |
| | | ></el-tab-pane |
| | | > |
| | | <el-tab-pane name="pharmacy" |
| | | ><span class="mulsz" slot="label" |
| | | >ç¨è¯({{ yynumber }}) |
| | | </span></el-tab-pane |
| | | > |
| | | </el-tabs> |
| | | </el-tab-pane> |
| | | <el-tab-pane name="monitor"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-data"></i> å¥åº·çæµ</span |
| | | > |
| | | |
| | | <el-tabs v-model="sontwoactiveName" @tab-click="handleClick"> |
| | | <el-tab-pane name="blood" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-operation"></i> è¡å</span |
| | | ></el-tab-pane |
| | | > |
| | | <el-tab-pane name="glucose" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-odometer"></i>è¡ç³ |
| | | </span></el-tab-pane |
| | | > |
| | | <el-tab-pane name="weight" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-data"></i>ä½é |
| | | </span></el-tab-pane |
| | | > |
| | | </el-tabs></el-tab-pane |
| | | > |
| | | <el-tab-pane name="serve"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-custom"></i> æå¡è®°å½</span |
| | | > |
| | | |
| | | 宿¶ä»»å¡è¡¥å¿</el-tab-pane |
| | | > |
| | | </el-tabs> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- å¥åº·æ¡£æ¡æ¨¡å --> |
| | | <div class="information-content" v-if="activeName == 'health'"> |
| | | <div class="top-message"> |
| | | <div class="headline">åºç¡ä¿¡æ¯</div> |
| | | <div class="detailed"> |
| | | <div class="one-column"> |
| | | <div>æ£è
å§åï¼<span class="spanvalue">ç大ç¾</span></div> |
| | | <div>æ§å«ï¼<span class="spanvalue">ç·</span></div> |
| | | |
| | | <div>è¯ä»¶ç±»åï¼<span class="spanvalue">身份è¯</span></div> |
| | | </div> |
| | | <div class="one-column"> |
| | | <div>åºçæ¥æï¼<span class="spanvalue">1999-01-02</span></div> |
| | | |
| | | <div>å¹´é¾ï¼<span class="spanvalue">121</span></div> |
| | | |
| | | <div class=""> |
| | | è¯ä»¶å·ç ï¼<span class="spanvalue">312223222322232223</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="bottom-message"> |
| | | <div class="headline">å·ç ç»´æ¤</div> |
| | | <div class="Table-screen"> |
| | | <el-table :data="tableData" style="width: 100%"> |
| | | <el-table-column prop="name" label="å§å" width="180"> |
| | | </el-table-column> |
| | | <el-table-column prop="phonenumber" label="èç³»æ¹å¼" width="180"> |
| | | </el-table-column> |
| | | <el-table-column prop="concern" label="å
³ç³»"> </el-table-column> |
| | | <el-table-column prop="source" label="èç³»äººæ¥æº"> |
| | | </el-table-column> |
| | | <el-table-column prop="default" label="é»è®¤èç³»æ¹å¼"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label-class-name="columcz" |
| | | fixed="right" |
| | | label="æä½" |
| | | width="300" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button type="success" size="small" |
| | | >设为é»è®¤èç³»æ¹å¼</el-button |
| | | > |
| | | <el-button type="warning" size="small">ç¼è¾</el-button> |
| | | <el-button type="danger" size="small">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- å»çæ¡£æ¡ --> |
| | | <div class="medical-record" v-else-if="activeName == 'medical'"> |
| | | <!-- é¨è¯ --> |
| | | <div v-if="sonactiveName == 'outpatient'"> |
| | | <el-table :data="serviceData" style="width: 100%"> |
| | | <el-table-column prop="daya" label="å°±è¯æ¥æ" width="180"> |
| | | </el-table-column> |
| | | <el-table-column prop="hospitalname" label="å»é¢åç§°" width="180"> |
| | | </el-table-column> |
| | | <el-table-column prop="result" label="è¯æç»æ"> </el-table-column> |
| | | <el-table-column prop="administrative" label="å°±è¯ç§å®¤"> |
| | | </el-table-column> |
| | | <el-table-column prop="doctor" label="å»ç"> </el-table-column> |
| | | <el-table-column label-class-name="columcz" label="æä½" width="300"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" size="small">详æ
</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" |
| | | /> |
| | | </div> |
| | | <!-- ä½é¢ --> |
| | | <div v-if="sonactiveName == 'inhospital'"> |
| | | <el-table :data="serviceData" style="width: 100%"> |
| | | <el-table-column prop="godaya" label="å
¥é¢æ¥æ"> </el-table-column> |
| | | <el-table-column prop="hospitalname" label="å»é¢åç§°"> |
| | | </el-table-column> |
| | | <el-table-column prop="result" label="å
¥é¢ç§å«"> </el-table-column> |
| | | <el-table-column prop="administrative" label="ç
åº"> |
| | | </el-table-column> |
| | | <el-table-column prop="bed" label="åºä½å·"> </el-table-column> |
| | | <el-table-column prop="doctor" label="å
¥é¢è¯æ"> </el-table-column> |
| | | <el-table-column prop="today" label="åºé¢æ¶é´"> </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- æ£éª --> |
| | | <div v-if="sonactiveName == 'checkout'"> |
| | | <el-table :data="serviceData" style="width: 100%"> |
| | | <el-table-column prop="godaya" label="æ£éªåå·"> </el-table-column> |
| | | <el-table-column prop="hospitalname" label="æ¥åæ¥æ"> |
| | | </el-table-column> |
| | | <el-table-column prop="result" label="æ£éªé¡¹ç®"> </el-table-column> |
| | | <el-table-column prop="administrative" label="å»é¢åç§°"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- æ£æ¥ --> |
| | | <div v-if="sonactiveName == 'examine'"> |
| | | <el-table :data="serviceData" style="width: 100%"> |
| | | <el-table-column prop="godaya" label="æ¥åå"> </el-table-column> |
| | | <el-table-column prop="hospitalname" label="æ¥åæ¶é´"> |
| | | </el-table-column> |
| | | <el-table-column prop="result" label="æ£æ¥é¡¹ç®"> </el-table-column> |
| | | <el-table-column prop="administrative" label="å»é¢åç§°"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- 使£ --> |
| | | <div v-if="sonactiveName == 'physical'"> |
| | | <el-table :data="serviceData" style="width: 100%"> |
| | | <el-table-column prop="daya" label="å°±è¯æ¥æ"> </el-table-column> |
| | | <el-table-column prop="hospitalname" label="å»é¢åç§°"> |
| | | </el-table-column> |
| | | <el-table-column prop="result" label="è¯æç»æ"> </el-table-column> |
| | | <el-table-column prop="administrative" label="å°±è¯ç§å®¤"> |
| | | </el-table-column> |
| | | <el-table-column prop="doctor" label="å»ç"> </el-table-column> |
| | | <!-- <el-table-column |
| | | label-class-name="columcz" |
| | | fixed="right" |
| | | label="æä½" |
| | | width="300" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" size="small">详æ
</el-button> |
| | | </template> |
| | | </el-table-column> --> |
| | | </el-table> |
| | | </div> |
| | | <!-- ç¨è¯ --> |
| | | <div v-if="sonactiveName == 'pharmacy'"> |
| | | <el-table :data="serviceData" style="width: 100%"> |
| | | <el-table-column prop="daya" label="å°±è¯æ¥æ"> </el-table-column> |
| | | <el-table-column prop="hospitalname" label="å»é¢åç§°"> |
| | | </el-table-column> |
| | | <el-table-column prop="result" label="è¯æç»æ"> </el-table-column> |
| | | <el-table-column prop="administrative" label="å°±è¯ç§å®¤"> |
| | | </el-table-column> |
| | | <el-table-column prop="doctor" label="å»ç"> </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- æå¡è®°å½ --> |
| | | <div class="medical-record" v-else-if="activeName == 'serve'">sdaad</div> |
| | | <!-- å¥åº·çæµ --> |
| | | <div class="medical-record" v-show="activeName == 'monitor'"> |
| | | <!-- è¡å徿 --> |
| | | <div v-show="sontwoactiveName == 'blood'"> |
| | | <div |
| | | id="xyeCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 1300px; height: 800px" |
| | | ></div> |
| | | </div> |
| | | <!-- è¡ç³ --> |
| | | <div v-show="sontwoactiveName == 'glucose'"> |
| | | <div |
| | | id="xteCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 1300px; height: 800px" |
| | | ></div> |
| | | </div> |
| | | <!-- ä½é --> |
| | | <div v-show="sontwoactiveName == 'weight'"> |
| | | <div |
| | | id="tzeCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 1300px; height: 800px" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <div id="xyeCharts" style="width: 500px; height: 500px"></div> --> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import userAvatar from "./userAvatar"; |
| | | import userInfo from "./userInfo"; |
| | | import resetPwd from "./resetPwd"; |
| | | import * as echarts from "echarts"; |
| | | |
| | | import { getUserProfile } from "@/api/system/user"; |
| | | import { listJob } from "@/api/monitor/job"; //è·åå表æ¥å£å¾
å® |
| | | |
| | | export default { |
| | | name: "Profile", |
| | | components: { userAvatar, userInfo, resetPwd }, |
| | | data() { |
| | | return { |
| | | user: {}, |
| | | roleGroup: {}, |
| | | postGroup: {}, |
| | | mznumber: 14, |
| | | zynumber: 34, |
| | | jynumber: 32, |
| | | jcnumber: 12, |
| | | tjnumber: 12, |
| | | yynumber: 12, |
| | | total: 0, // æ»æ¡æ° |
| | | activeTab: "userinfo", |
| | | activeName: "health", //ä¸ç±»å¯¼èª |
| | | sonactiveName: "outpatient", //å¥åº·çæµå¯¼èª |
| | | sontwoactiveName: "blood", //å»çæ¡£æ¡å¯¼èª |
| | | // æ¥è¯¢åæ° |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | jobName: undefined, |
| | | jobGroup: undefined, |
| | | status: undefined, |
| | | }, |
| | | echartdom: {}, |
| | | xtechartdom: {}, |
| | | tzechartdom: {}, |
| | | tableData: [ |
| | | { |
| | | date: "2016-05-02", |
| | | name: "çå°è", |
| | | address: "䏿µ·å¸æ®éåºéæ²æ±è·¯ 1518 å¼", |
| | | }, |
| | | { |
| | | date: "2016-05-04", |
| | | name: "çå°è", |
| | | address: "䏿µ·å¸æ®éåºéæ²æ±è·¯ 1517 å¼", |
| | | }, |
| | | { |
| | | date: "2016-05-01", |
| | | name: "çå°è", |
| | | address: "䏿µ·å¸æ®éåºéæ²æ±è·¯ 1519 å¼", |
| | | }, |
| | | { |
| | | date: "2016-05-03", |
| | | name: "çå°è", |
| | | address: "䏿µ·å¸æ®éåºéæ²æ±è·¯ 1516 å¼", |
| | | }, |
| | | ], |
| | | serviceData: [ |
| | | { |
| | | daya: "2023-12-12", |
| | | hospitalname: "åå", |
| | | result: "é§å¸¦æä¼¤", |
| | | administrative: "骨ç§", |
| | | doctor: "å´å¤§é¾", |
| | | }, |
| | | ], |
| | | }; |
| | | }, |
| | | created() { |
| | | this.$nextTick(function () { |
| | | this.echartdom = document.getElementById("xyeCharts"); |
| | | this.xtechartdom = document.getElementById("xteCharts"); |
| | | this.tzechartdom = document.getElementById("tzeCharts"); |
| | | console.log(this.echartdom); |
| | | console.log(this.xtechartdom); |
| | | console.log(this.tzechartdom); |
| | | this.echartsInit(); |
| | | this.xtechartsInit(); |
| | | this.tzechartsInit(); |
| | | }); |
| | | this.getList(); |
| | | }, |
| | | methods() {}, |
| | | |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | getList() { |
| | | this.loading = true; |
| | | listJob(this.queryParams).then((response) => { |
| | | this.jobList = 1; |
| | | this.total = 1; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | // getUser() { |
| | | // getUserProfile().then((response) => { |
| | | // this.user = response.data; |
| | | // this.roleGroup = response.roleGroup; |
| | | // this.postGroup = response.postGroup; |
| | | // }); |
| | | // }, |
| | | handleClick(tab, event) { |
| | | console.log(tab, event); |
| | | }, |
| | | |
| | | // è¡åå¾è¡¨é¨å |
| | | echartsInit() { |
| | | // åºäºåå¤å¥½çdomï¼åå§åechartså®ä¾ |
| | | console.log(echarts); |
| | | console.log(this.echartdom); |
| | | console.log(this.$refs.xyeCharts); |
| | | var myxyChart = echarts.init(this.echartdom); |
| | | console.log(myxyChart); |
| | | // var myxyChart = this.$echarts.init(document.getElementById("xyeCharts")); |
| | | // var myxyChart = this.$echarts.init(this.$refs.xyeCharts); |
| | | var option = { |
| | | title: { |
| | | text: "åå²è¡åè®°å½", |
| | | }, |
| | | tooltip: { |
| | | trigger: "axis", |
| | | }, |
| | | legend: {}, |
| | | toolbox: { |
| | | show: true, |
| | | feature: { |
| | | dataZoom: { |
| | | yAxisIndex: "none", |
| | | }, |
| | | dataView: { readOnly: false }, |
| | | magicType: { type: ["line", "bar"] }, |
| | | restore: {}, |
| | | saveAsImage: {}, |
| | | }, |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | boundaryGap: false, |
| | | data: ["䏿", "äºæ", "䏿", "åæ", "äºæ", "å
æ", "䏿"], |
| | | }, |
| | | yAxis: { |
| | | type: "value", |
| | | axisLabel: { |
| | | formatter: "{value}", |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | name: "æ¶ç¼©å", |
| | | type: "line", |
| | | data: [100, 120, 130, 121, 132, 142, 119], |
| | | itemStyle: { |
| | | normal: { |
| | | color: "#ff7979", |
| | | }, |
| | | }, |
| | | markPoint: { |
| | | data: [{ type: "max", name: "èå¼ åé«å¼" }], |
| | | }, |
| | | markLine: { |
| | | data: [{ yAxis: 140, name: "æ£å¸¸èå¼ åé«å¼" }], |
| | | }, |
| | | }, |
| | | { |
| | | name: "èå¼ å", |
| | | type: "line", |
| | | data: [71, 79, 82, 85, 93, 82, 90], |
| | | itemStyle: { |
| | | normal: { |
| | | color: "#409eff", |
| | | }, |
| | | }, |
| | | markPoint: { |
| | | data: [{ name: "卿ä½", type: "min" }], |
| | | }, |
| | | markLine: { |
| | | data: [{ yAxis: 80, name: "æ£å¸¸èå¼ åé«å¼" }], |
| | | }, |
| | | }, |
| | | ], |
| | | }; |
| | | console.log("ss"); |
| | | // 使ç¨åæå®çé
ç½®é¡¹åæ°æ®æ¾ç¤ºå¾è¡¨ã |
| | | myxyChart.setOption(option); |
| | | }, |
| | | // è¡ç³å¾è¡¨ |
| | | xtechartsInit() { |
| | | // åºäºåå¤å¥½çdomï¼åå§åechartså®ä¾ |
| | | // console.log(echarts); |
| | | console.log(this.xtechartdom); |
| | | var myxyChart = echarts.init(this.xtechartdom); |
| | | console.log(myxyChart); |
| | | const data = [ |
| | | ["2000-06-05", 116], |
| | | ["2000-06-06", 129], |
| | | ["2000-06-07", 135], |
| | | ["2000-06-08", 86], |
| | | ["2000-06-09", 73], |
| | | ["2000-06-10", 85], |
| | | ["2000-06-11", 73], |
| | | ["2000-06-12", 68], |
| | | ["2000-06-13", 92], |
| | | ["2000-06-14", 130], |
| | | ["2000-06-15", 245], |
| | | ["2000-06-16", 139], |
| | | ["2000-06-17", 115], |
| | | ["2000-06-18", 111], |
| | | ["2000-06-19", 309], |
| | | ["2000-06-20", 206], |
| | | ["2000-06-21", 137], |
| | | ["2000-06-22", 128], |
| | | ["2000-06-23", 85], |
| | | ]; |
| | | const dateList = data.map(function (item) { |
| | | return item[0]; |
| | | }); |
| | | const valueList = data.map(function (item) { |
| | | return item[1]; |
| | | }); |
| | | var option = { |
| | | title: { |
| | | text: "åå²è¡ç³è®°å½", |
| | | }, |
| | | visualMap: [ |
| | | { |
| | | show: false, |
| | | type: "continuous", |
| | | seriesIndex: 0, |
| | | min: 0, |
| | | max: 400, |
| | | }, |
| | | ], |
| | | title: [ |
| | | { |
| | | left: "center", |
| | | text: "è¡ç³åå²çæµ", |
| | | }, |
| | | ], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | data: dateList, |
| | | }, |
| | | ], |
| | | yAxis: [{}], |
| | | series: [ |
| | | { |
| | | type: "line", |
| | | showSymbol: false, |
| | | data: valueList, |
| | | }, |
| | | ], |
| | | }; |
| | | console.log("ss"); |
| | | // 使ç¨åæå®çé
ç½®é¡¹åæ°æ®æ¾ç¤ºå¾è¡¨ã |
| | | myxyChart.setOption(option); |
| | | }, |
| | | // ä½éå¾è¡¨ |
| | | tzechartsInit() { |
| | | // åºäºåå¤å¥½çdomï¼åå§åechartså®ä¾ |
| | | console.log(echarts); |
| | | console.log(this.tzechartdom); |
| | | var myxyChart = echarts.init(this.tzechartdom); |
| | | console.log(myxyChart); |
| | | const data = [ |
| | | ["2000-06-05", 116], |
| | | ["2000-06-06", 99], |
| | | ["2000-06-07", 105], |
| | | ["2000-06-08", 126], |
| | | ["2000-06-09", 73], |
| | | ["2000-06-10", 85], |
| | | ["2000-06-11", 73], |
| | | ["2000-06-12", 68], |
| | | ["2000-06-13", 92], |
| | | ["2000-06-14", 130], |
| | | ["2000-06-15", 245], |
| | | ["2000-06-16", 119], |
| | | ["2000-06-17", 115], |
| | | ["2000-06-18", 201], |
| | | ["2000-06-19", 209], |
| | | ["2000-06-20", 106], |
| | | ["2000-06-21", 137], |
| | | ["2000-06-22", 128], |
| | | ["2000-06-23", 85], |
| | | ]; |
| | | const dateList = data.map(function (item) { |
| | | return item[0]; |
| | | }); |
| | | const valueList = data.map(function (item) { |
| | | return item[1]; |
| | | }); |
| | | var option = { |
| | | title: { |
| | | text: "åå²è¡ç³è®°å½", |
| | | }, |
| | | toolbox: { |
| | | show: true, |
| | | feature: { |
| | | dataZoom: { |
| | | yAxisIndex: "none", |
| | | }, |
| | | dataView: { readOnly: false }, |
| | | magicType: { type: ["line", "bar"] }, |
| | | restore: {}, |
| | | saveAsImage: {}, |
| | | }, |
| | | }, |
| | | visualMap: [ |
| | | { |
| | | show: false, |
| | | type: "continuous", |
| | | seriesIndex: 0, |
| | | min: 0, |
| | | max: 400, |
| | | }, |
| | | ], |
| | | title: [ |
| | | { |
| | | left: "center", |
| | | text: "è¡ç³åå²çæµ", |
| | | }, |
| | | ], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | data: dateList, |
| | | }, |
| | | ], |
| | | yAxis: [{}], |
| | | series: [ |
| | | { |
| | | type: "line", |
| | | showSymbol: false, |
| | | data: valueList, |
| | | lineStyle: { |
| | | width: 3, |
| | | type: "solid", |
| | | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ |
| | | { |
| | | offset: 0, |
| | | color: "#FE7D2F", |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: "#F9D423", |
| | | }, |
| | | ]), |
| | | }, |
| | | }, |
| | | ], |
| | | }; |
| | | console.log("ss"); |
| | | // 使ç¨åæå®çé
ç½®é¡¹åæ°æ®æ¾ç¤ºå¾è¡¨ã |
| | | myxyChart.setOption(option); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .personage { |
| | | display: flex; |
| | | .text-center { |
| | | width: 40px; |
| | | height: 40px; |
| | | margin-right: 10px; |
| | | img { |
| | | width: 100%; |
| | | } |
| | | } |
| | | .information { |
| | | font-size: 25px; |
| | | .info-xx { |
| | | margin-top: 15px; |
| | | border-bottom: 2px solid rgb(65, 161, 190); |
| | | display: flex; |
| | | span { |
| | | margin-left: 30px; |
| | | } |
| | | .xinz-inf { |
| | | cursor: pointer; |
| | | margin-left: 20px; |
| | | height: 23px; |
| | | line-height: 23px; |
| | | padding: 2px; |
| | | align-items: center; |
| | | font-size: 16px; |
| | | color: rgb(85, 151, 250); |
| | | border: 1px solid #439fff; |
| | | border-radius: 9px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .el-tabs--border-card { |
| | | font-size: 25px; |
| | | .mulsz { |
| | | font-size: 25px; |
| | | margin-top: 20px; |
| | | } |
| | | } |
| | | .information-content { |
| | | margin-top: 20px; |
| | | 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); |
| | | .top-message { |
| | | margin-top: 25px; |
| | | margin-left: 100px; |
| | | .detailed { |
| | | width: 70%; |
| | | padding: 30px; |
| | | margin-bottom: 30px; |
| | | background-color: #ddf0f8; |
| | | .one-column { |
| | | display: flex; |
| | | font-size: 20px; |
| | | margin-bottom: 30px; |
| | | padding-bottom: 3px; |
| | | .spanvalue { |
| | | display: inline-block; |
| | | min-width: 200px; |
| | | border-bottom: 1px solid rgb(172, 172, 172); |
| | | } |
| | | |
| | | div { |
| | | width: 330px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .headline { |
| | | font-size: 25px; |
| | | padding-left: 5px; |
| | | margin-bottom: 10px; |
| | | border-left: 8px solid rgb(65, 161, 190); |
| | | } |
| | | .bottom-message { |
| | | margin-bottom: 25px; |
| | | margin-left: 100px; |
| | | .Table-screen { |
| | | width: 70%; |
| | | padding: 30px; |
| | | margin-bottom: 30px; |
| | | background-color: #ddf0f8; |
| | | font-size: 20px !important; |
| | | } |
| | | } |
| | | } |
| | | .medical-record { |
| | | 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); |
| | | } |
| | | .sontwoactiveName { |
| | | margin: 0 auto; |
| | | } |
| | | // .columcz { |
| | | // align-items: center!important; |
| | | // } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-form ref="form" :model="user" :rules="rules" label-width="80px"> |
| | | <el-form-item label="æ§å¯ç " prop="oldPassword"> |
| | | <el-input v-model="user.oldPassword" placeholder="请è¾å
¥æ§å¯ç " type="password" show-password/> |
| | | </el-form-item> |
| | | <el-form-item label="æ°å¯ç " prop="newPassword"> |
| | | <el-input v-model="user.newPassword" placeholder="请è¾å
¥æ°å¯ç " type="password" show-password/> |
| | | </el-form-item> |
| | | <el-form-item label="确认å¯ç " prop="confirmPassword"> |
| | | <el-input v-model="user.confirmPassword" placeholder="请确认æ°å¯ç " type="password" show-password/> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" size="mini" @click="submit">ä¿å</el-button> |
| | | <el-button type="danger" size="mini" @click="close">å
³é</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <script> |
| | | import { updateUserPwd } from "@/api/system/user"; |
| | | |
| | | export default { |
| | | data() { |
| | | const equalToPassword = (rule, value, callback) => { |
| | | if (this.user.newPassword !== value) { |
| | | callback(new Error("两次è¾å
¥çå¯ç ä¸ä¸è´")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | user: { |
| | | oldPassword: undefined, |
| | | newPassword: undefined, |
| | | confirmPassword: undefined |
| | | }, |
| | | // è¡¨åæ ¡éª |
| | | rules: { |
| | | oldPassword: [ |
| | | { required: true, message: "æ§å¯ç ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | newPassword: [ |
| | | { required: true, message: "æ°å¯ç ä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | { min: 6, max: 20, message: "é¿åº¦å¨ 6 å° 20 个å符", trigger: "blur" } |
| | | ], |
| | | confirmPassword: [ |
| | | { required: true, message: "确认å¯ç ä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | { required: true, validator: equalToPassword, trigger: "blur" } |
| | | ] |
| | | } |
| | | }; |
| | | }, |
| | | methods: { |
| | | submit() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | close() { |
| | | this.$tab.closePage(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="user-info-head" @click="editCropper()"><img v-bind:src="options.img" title="ç¹å»ä¸ä¼ 头å" class="img-circle img-lg" /></div> |
| | | <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog"> |
| | | <el-row> |
| | | <el-col :xs="24" :md="12" :style="{height: '350px'}"> |
| | | <vue-cropper |
| | | ref="cropper" |
| | | :img="options.img" |
| | | :info="true" |
| | | :autoCrop="options.autoCrop" |
| | | :autoCropWidth="options.autoCropWidth" |
| | | :autoCropHeight="options.autoCropHeight" |
| | | :fixedBox="options.fixedBox" |
| | | :outputType="options.outputType" |
| | | @realTime="realTime" |
| | | v-if="visible" |
| | | /> |
| | | </el-col> |
| | | <el-col :xs="24" :md="12" :style="{height: '350px'}"> |
| | | <div class="avatar-upload-preview"> |
| | | <img :src="previews.url" :style="previews.img" /> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <br /> |
| | | <el-row> |
| | | <el-col :lg="2" :sm="3" :xs="3"> |
| | | <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload"> |
| | | <el-button size="small"> |
| | | éæ© |
| | | <i class="el-icon-upload el-icon--right"></i> |
| | | </el-button> |
| | | </el-upload> |
| | | </el-col> |
| | | <el-col :lg="{span: 1, offset: 2}" :sm="2" :xs="2"> |
| | | <el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button> |
| | | </el-col> |
| | | <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2"> |
| | | <el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button> |
| | | </el-col> |
| | | <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2"> |
| | | <el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button> |
| | | </el-col> |
| | | <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2"> |
| | | <el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button> |
| | | </el-col> |
| | | <el-col :lg="{span: 2, offset: 6}" :sm="2" :xs="2"> |
| | | <el-button type="primary" size="small" @click="uploadImg()">æ 交</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import store from "@/store"; |
| | | import { VueCropper } from "vue-cropper"; |
| | | import { uploadAvatar } from "@/api/system/user"; |
| | | import { debounce } from '@/utils' |
| | | |
| | | export default { |
| | | components: { VueCropper }, |
| | | props: { |
| | | user: { |
| | | type: Object |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | // æ¯å¦æ¾ç¤ºå¼¹åºå± |
| | | open: false, |
| | | // æ¯å¦æ¾ç¤ºcropper |
| | | visible: false, |
| | | // å¼¹åºå±æ é¢ |
| | | title: "ä¿®æ¹å¤´å", |
| | | options: { |
| | | img: store.getters.avatar, //è£åªå¾ççå°å |
| | | autoCrop: true, // æ¯å¦é»è®¤çææªå¾æ¡ |
| | | autoCropWidth: 200, // é»è®¤çææªå¾æ¡å®½åº¦ |
| | | autoCropHeight: 200, // é»è®¤çææªå¾æ¡é«åº¦ |
| | | fixedBox: true, // åºå®æªå¾æ¡å¤§å° ä¸å
许æ¹å |
| | | outputType:"png" // é»è®¤çææªå¾ä¸ºPNGæ ¼å¼ |
| | | }, |
| | | previews: {}, |
| | | resizeHandler: null |
| | | }; |
| | | }, |
| | | methods: { |
| | | // ç¼è¾å¤´å |
| | | editCropper() { |
| | | this.open = true; |
| | | }, |
| | | // æå¼å¼¹åºå±ç»ææ¶çåè° |
| | | modalOpened() { |
| | | this.visible = true; |
| | | if (!this.resizeHandler) { |
| | | this.resizeHandler = debounce(() => { |
| | | this.refresh() |
| | | }, 100) |
| | | } |
| | | window.addEventListener("resize", this.resizeHandler) |
| | | }, |
| | | // å·æ°ç»ä»¶ |
| | | refresh() { |
| | | this.$refs.cropper.refresh(); |
| | | }, |
| | | // è¦çé»è®¤çä¸ä¼ è¡ä¸º |
| | | requestUpload() { |
| | | }, |
| | | // åå·¦æè½¬ |
| | | rotateLeft() { |
| | | this.$refs.cropper.rotateLeft(); |
| | | }, |
| | | // åå³æè½¬ |
| | | rotateRight() { |
| | | this.$refs.cropper.rotateRight(); |
| | | }, |
| | | // å¾çç¼©æ¾ |
| | | changeScale(num) { |
| | | num = num || 1; |
| | | this.$refs.cropper.changeScale(num); |
| | | }, |
| | | // ä¸ä¼ é¢å¤ç |
| | | beforeUpload(file) { |
| | | if (file.type.indexOf("image/") == -1) { |
| | | this.$modal.msgError("æä»¶æ ¼å¼é误ï¼è¯·ä¸ä¼ å¾çç±»å,å¦ï¼JPGï¼PNGåç¼çæä»¶ã"); |
| | | } else { |
| | | const reader = new FileReader(); |
| | | reader.readAsDataURL(file); |
| | | reader.onload = () => { |
| | | this.options.img = reader.result; |
| | | }; |
| | | } |
| | | }, |
| | | // ä¸ä¼ å¾ç |
| | | uploadImg() { |
| | | this.$refs.cropper.getCropBlob(data => { |
| | | let formData = new FormData(); |
| | | formData.append("avatarfile", data); |
| | | uploadAvatar(formData).then(response => { |
| | | this.open = false; |
| | | this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl; |
| | | store.commit('SET_AVATAR', this.options.img); |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | this.visible = false; |
| | | }); |
| | | }); |
| | | }, |
| | | // 宿¶é¢è§ |
| | | realTime(data) { |
| | | this.previews = data; |
| | | }, |
| | | // å
³éçªå£ |
| | | closeDialog() { |
| | | this.options.img = store.getters.avatar |
| | | this.visible = false; |
| | | window.removeEventListener("resize", this.resizeHandler) |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .user-info-head { |
| | | position: relative; |
| | | display: inline-block; |
| | | height: 120px; |
| | | } |
| | | |
| | | .user-info-head:hover:after { |
| | | content: '+'; |
| | | position: absolute; |
| | | left: 0; |
| | | right: 0; |
| | | top: 0; |
| | | bottom: 0; |
| | | color: #eee; |
| | | background: rgba(0, 0, 0, 0.5); |
| | | font-size: 24px; |
| | | font-style: normal; |
| | | -webkit-font-smoothing: antialiased; |
| | | -moz-osx-font-smoothing: grayscale; |
| | | cursor: pointer; |
| | | line-height: 110px; |
| | | border-radius: 50%; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-form ref="form" :model="user" :rules="rules" label-width="80px"> |
| | | <el-form-item label="ç¨æ·æµç§°" prop="nickName"> |
| | | <el-input v-model="user.nickName" maxlength="30" /> |
| | | </el-form-item> |
| | | <el-form-item label="ææºå·ç " prop="phonenumber"> |
| | | <el-input v-model="user.phonenumber" maxlength="11" /> |
| | | </el-form-item> |
| | | <el-form-item label="é®ç®±" prop="email"> |
| | | <el-input v-model="user.email" maxlength="50" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ§å«"> |
| | | <el-radio-group v-model="user.sex"> |
| | | <el-radio label="0">ç·</el-radio> |
| | | <el-radio label="1">女</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" size="mini" @click="submit">ä¿å</el-button> |
| | | <el-button type="danger" size="mini" @click="close">å
³é</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <script> |
| | | import { updateUserProfile } from "@/api/system/user"; |
| | | |
| | | export default { |
| | | props: { |
| | | user: { |
| | | type: Object |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | // è¡¨åæ ¡éª |
| | | rules: { |
| | | nickName: [ |
| | | { required: true, message: "ç¨æ·æµç§°ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | email: [ |
| | | { required: true, message: "é®ç®±å°åä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | { |
| | | type: "email", |
| | | message: "请è¾å
¥æ£ç¡®çé®ç®±å°å", |
| | | trigger: ["blur", "change"] |
| | | } |
| | | ], |
| | | phonenumber: [ |
| | | { required: true, message: "ææºå·ç ä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | { |
| | | pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, |
| | | message: "请è¾å
¥æ£ç¡®çææºå·ç ", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | } |
| | | }; |
| | | }, |
| | | methods: { |
| | | submit() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | updateUserProfile(this.user).then(response => { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | close() { |
| | | this.$tab.closePage(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |