| | |
| | | "v-charts": "^1.19.0", |
| | | "vue": "^2.6.10", |
| | | "vue-axios": "^2.1.2", |
| | | "vue-cropper": "^0.6.5", |
| | | "vue-echarts": "5.0.0-beta.0", |
| | | "vue-flowchart-editor": "1.0.2", |
| | | "vue-i18n": "^8.7.0", |
| | |
| | | { |
| | | label: '个人信æ¯', |
| | | prop: 'info', |
| | | column: [{ |
| | | label: '头å', |
| | | type: 'upload', |
| | | listType: 'picture-img', |
| | | propsHttp: { |
| | | res: 'data', |
| | | url: 'link', |
| | | column: [ |
| | | { |
| | | label: '头å', |
| | | prop: 'avatar', |
| | | formslot: true, |
| | | span: 24, |
| | | }, |
| | | canvasOption: { |
| | | text: ' ', |
| | | ratio: 0.1 |
| | | { |
| | | label: 'ç¨æ·å', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'userId', |
| | | readonly:true |
| | | }, |
| | | action: '/api/blade-resource/oss/endpoint/put-file', |
| | | tip: 'åªè½ä¸ä¼ jpg/pngç¨æ·å¤´åï¼ä¸ä¸è¶
è¿500kb', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'avatar' |
| | | }, { |
| | | label: 'å§å', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'realName' |
| | | }, { |
| | | label: 'ç¨æ·å', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'name' |
| | | }, { |
| | | label: 'ææºå·', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'phone' |
| | | }, { |
| | | label: 'é®ç®±', |
| | | prop: 'email', |
| | | span: 12, |
| | | row: true, |
| | | }] |
| | | { |
| | | label: 'å§å', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'userName' |
| | | }, |
| | | { |
| | | label: 'å½åè§è²', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'personName', |
| | | readonly:true, |
| | | }, |
| | | { |
| | | label: 'å½åå¯çº§', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'userSecretText', |
| | | readonly:true, |
| | | }, |
| | | { |
| | | label: 'é®ç®±', |
| | | prop: 'email', |
| | | span: 12, |
| | | row: true, |
| | | }] |
| | | }, |
| | | { |
| | | label: 'ä¿®æ¹å¯ç ', |
| | | prop: 'password', |
| | | column: [{ |
| | | label: 'åå¯ç ', |
| | | span: 12, |
| | | row: true, |
| | | type: 'password', |
| | | prop: 'oldPassword' |
| | | }, { |
| | | label: 'æ°å¯ç ', |
| | | span: 12, |
| | | row: true, |
| | | type: 'password', |
| | | prop: 'newPassword' |
| | | }, { |
| | | label: '确认å¯ç ', |
| | | span: 12, |
| | | row: true, |
| | | type: 'password', |
| | | prop: 'newPassword1' |
| | | }] |
| | | column: [ |
| | | { |
| | | label: 'ç»éå¯ç ', |
| | | prop: 'oldPassword', |
| | | span: 24, |
| | | labelWidth: "7%", |
| | | type: 'password', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥ç»éå¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æ°ç»éå¯ç ', |
| | | prop: 'password', |
| | | span: 24, |
| | | labelWidth: "7%", |
| | | type: 'password', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥æ°ç»éå¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æ°å¯ç ç»é确认', |
| | | prop: 'confirmPassword', |
| | | span: 24, |
| | | labelWidth: "7%", |
| | | type: 'password', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请确认ç»éå¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | } |
| | |
| | | </el-tooltip> |
| | | <img :src="userInfo.avatar" |
| | | class="top-bar__img"> |
| | | <el-dropdown> |
| | | <div> |
| | | <el-dropdown style="height: 40px"> |
| | | <span class="el-dropdown-link"> |
| | | {{ userInfo.userName }} |
| | | <i class="el-icon-arrow-down el-icon--right"></i> |
| | | </span> |
| | | <el-dropdown-menu slot="dropdown"> |
| | | <el-dropdown-item> |
| | | <router-link to="/">{{ $t('navbar.dashboard') }}</router-link> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item @click.native="changePasswordHandler"> |
| | | <!-- <router-link to="/info/index">{{ $t('navbar.userinfo') }}</router-link>--> |
| | | ä¿®æ¹å¯ç |
| | | </el-dropdown-item> |
| | | <el-dropdown-item v-if="this.website.switchMode" @click.native="switchDept" |
| | | >{{ $t('navbar.switchDept') }} |
| | | </el-dropdown-item> |
| | | <el-dropdown-item divided |
| | | @click.native="logout">{{ $t('navbar.logOut') }} |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | | <el-dropdown-menu slot="dropdown"> |
| | | <el-dropdown-item> |
| | | <router-link to="/">{{ $t('navbar.dashboard') }}</router-link> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item> |
| | | <router-link to="/info/index">{{ $t('navbar.userinfo') }}</router-link> |
| | | <!-- ä¿®æ¹å¯ç --> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item v-if="this.website.switchMode" @click.native="switchDept" |
| | | >{{ $t('navbar.switchDept') }} |
| | | </el-dropdown-item> |
| | | <el-dropdown-item divided |
| | | @click.native="logout">{{ $t('navbar.logOut') }} |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | | </div> |
| | | |
| | | <el-dialog :visible.sync="userBox" |
| | | append-to-body |
| | | title="ç¨æ·ä¿¡æ¯éæ©" |
| | |
| | | <avue-form ref="form" v-model="userForm" :option="userOption" @submit="submitSwitch"/> |
| | | </el-dialog> |
| | | |
| | | <!-- ä¿®æ¹å¯ç å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | v-dialogDrag |
| | | :visible.sync="passwordVisible" |
| | | append-to-body="true" |
| | | class="avue-dialog" |
| | | style="margin-top: -15vh" |
| | | title="ä¿®æ¹å¯ç " |
| | | width="50%" |
| | | @close="passwordClose"> |
| | | <avue-form ref="form" v-model="passwordForm" :option="passwordOption" @submit="submitSwitch"/> |
| | | </el-dialog> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import {resetRouter} from '@/router/router' |
| | | import {resetRouter} from '../../../router/router' |
| | | import {mapGetters, mapState} from "vuex"; |
| | | import {fullscreenToggel, listenfullscreen} from "@/util/util"; |
| | | import topLock from "./top-lock"; |
| | |
| | | import topColor from "./top-color"; |
| | | import topNotice from './top-notice' |
| | | import topLang from "./top-lang"; |
| | | import {changePassword} from "@/api/user" |
| | | import func from "@/util/func"; |
| | | |
| | | export default { |
| | | components: { |
| | |
| | | name: "top", |
| | | data() { |
| | | return { |
| | | passwordVisible: false, |
| | | passwordForm: {}, |
| | | passwordOption: { |
| | | submitText: 'ä¿å', |
| | | column: [ |
| | | { |
| | | label: 'ç»éå¯ç ', |
| | | prop: 'oldPassword', |
| | | span: 24, |
| | | labelWidth: "15%", |
| | | type: 'password', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥ç»éå¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æ°ç»éå¯ç ', |
| | | prop: 'password', |
| | | span: 24, |
| | | labelWidth: "15%", |
| | | type: 'password', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥æ°ç»éå¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æ°å¯ç ç»é确认', |
| | | prop: 'confirmPassword', |
| | | span: 24, |
| | | labelWidth: "15%", |
| | | type: 'password', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请确认ç»éå¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | }, |
| | | userBox: false, |
| | | userForm: { |
| | | deptId: '', |
| | |
| | | ]) |
| | | }, |
| | | methods: { |
| | | // ä¿®æ¹å¯ç |
| | | changePasswordHandler() { |
| | | this.passwordVisible = true; |
| | | }, |
| | | handleScreen() { |
| | | fullscreenToggel(); |
| | | }, |
| | |
| | | roleColumn.dicUrl = `/api/blade-system/role/select?userId=${userId}`; |
| | | roleColumn.display = true; |
| | | this.userBox = true; |
| | | }, |
| | | submitSwitch(form, done) { |
| | | let userInfo = JSON.parse(localStorage.getItem('saber-userInfo')); |
| | | let params = { |
| | | userName: userInfo.content.userId, |
| | | oldPassword: func.encryptData(form.oldPassword, 'daliantan0v0vcip'), |
| | | password: func.encryptData(form.password, 'daliantan0v0vcip'), |
| | | confirmPassword: func.encryptData(form.confirmPassword, 'daliantan0v0vcip'), |
| | | |
| | | } |
| | | changePassword(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.msg); |
| | | this.passwordVisible = false; |
| | | this.$store.dispatch("LogOut").then(() => { |
| | | resetRouter(); |
| | | this.$router.push({path: "/login"}); |
| | | }); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }) |
| | | done(); |
| | | }, |
| | | |
| | | // å
³éä¿®æ¹å¯ç å¯¹è¯æ¡ |
| | |
| | | i18n: 'info' |
| | | }, |
| | | component: () => |
| | | import( /* webpackChunkName: "views" */ '@/views/system/userinfo') |
| | | import( /* webpackChunkName: "views" */ '@/views/system/userInfo/index') |
| | | }] |
| | | }, { |
| | | path: '/work/process/leave', |
| | |
| | | height: 20px; |
| | | line-height: 20px; |
| | | } |
| | | .el-menu--popup-right-start{ |
| | | margin-left: 1px; |
| | | } |
| | | |
| | | .font14{font-size: 14px;width: 12px;height: 12px;display: inline-block;} |
| | | .font16{font-size: 16px;width: 14px;height: 14px;display: inline-block;} |
| | |
| | | this.tableLoading = true; |
| | | getDataUsers(this.page.currentPage, this.page.pageSize, this.searchParams).then(res => { |
| | | const data = res.data.data; |
| | | data.map(item => {item.secretGrade = item.secretGrade.toString()}) |
| | | this.tableData = data; |
| | | this.page.total = res.data.total; |
| | | this.tableLoading = false; |
| | | this.tableLoading = false;s |
| | | }) |
| | | this.departmentQueryOnLoad() |
| | | }, |
| | |
| | | align:'center', |
| | | type:'tree', |
| | | dicData: [], |
| | | hide:true, |
| | | props: { |
| | | label: 'name', |
| | | value: 'oid' |
| | |
| | | width:200, |
| | | }, |
| | | { |
| | | label: 'æå±é¨é¨', |
| | | prop: 'pkDepartmentName', |
| | | align:'center', |
| | | display: false, |
| | | search:true, |
| | | sortable:true, |
| | | overHidden: true, |
| | | width:200, |
| | | }, |
| | | { |
| | | label: 'ä¸ä¸', |
| | | prop: 'specialties', |
| | | sortable:true, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <basic-container> |
| | | <avue-form |
| | | ref="form" |
| | | v-model="form" |
| | | :option="option" |
| | | @submit="handleSubmit" |
| | | @tab-click="handleTabClick"> |
| | | <template slot="avatar" slot-scope="{disabled,size}"> |
| | | <div> |
| | | <userAvatar :avatar="form.avatar"/> |
| | | </div> |
| | | </template> |
| | | </avue-form> |
| | | </basic-container> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import option from "@/option/user/info"; |
| | | import {getUserInfo, updateInfo, updatePassword} from "@/api/system/user"; |
| | | import func from "../../../util/func"; |
| | | import {changePassword} from "../../../api/user" |
| | | import userAvatar from "./userAvatar"; |
| | | import {resetRouter} from '../../../router/router' |
| | | import {mapGetters} from "vuex"; |
| | | |
| | | export default { |
| | | components: {userAvatar,}, |
| | | data() { |
| | | return { |
| | | index: 0, |
| | | option: option, |
| | | form: {} |
| | | }; |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["userInfo"]), |
| | | }, |
| | | created() { |
| | | this.handleWitch(); |
| | | }, |
| | | methods: { |
| | | handleSubmit(form, done) { |
| | | if (this.index === 0) { |
| | | updateInfo(form).then(res => { |
| | | if (res.data.success) { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "ä¿®æ¹ä¿¡æ¯æå!" |
| | | }); |
| | | } else { |
| | | this.$message({ |
| | | type: "error", |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | done(); |
| | | }, error => { |
| | | window.console.log(error); |
| | | done(); |
| | | }) |
| | | } else { |
| | | let userInfo = JSON.parse(localStorage.getItem('saber-userInfo')); |
| | | let params = { |
| | | userName: userInfo.content.userId, |
| | | oldPassword: func.encryptData(form.oldPassword, 'daliantan0v0vcip'), |
| | | password: func.encryptData(form.password, 'daliantan0v0vcip'), |
| | | confirmPassword: func.encryptData(form.confirmPassword, 'daliantan0v0vcip'), |
| | | |
| | | } |
| | | changePassword(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.msg); |
| | | this.passwordVisible = false; |
| | | this.$store.dispatch("LogOut").then(() => { |
| | | resetRouter(); |
| | | this.$router.push({path: "/login"}); |
| | | }); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }) |
| | | } |
| | | }, |
| | | handleWitch() { |
| | | if (this.index === 0) { |
| | | this.form = {...this.userInfo}; |
| | | console.log(this.form); |
| | | } |
| | | }, |
| | | handleTabClick(tabs) { |
| | | this.index = func.toInt(tabs.index); |
| | | this.handleWitch(); |
| | | this.$refs.form.resetFields(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="user-info-head" @click="editCropper()"> |
| | | <div class="circular-upload-box" v-if="!options.img"> |
| | | <i class="el-icon-plus" style="font-size: 16px"></i> |
| | | </div> |
| | | <img v-else v-bind:src="options.img" 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"; |
| | | |
| | | export default { |
| | | components: { VueCropper }, |
| | | props:['avatar'], |
| | | data() { |
| | | return { |
| | | // æ¯å¦æ¾ç¤ºå¼¹åºå± |
| | | open: false, |
| | | // æ¯å¦æ¾ç¤ºcropper |
| | | visible: false, |
| | | // å¼¹åºå±æ é¢ |
| | | title: "ä¿®æ¹å¤´å", |
| | | options: { |
| | | img: this.avatar, //è£åªå¾ççå°å |
| | | autoCrop: true, // æ¯å¦é»è®¤çææªå¾æ¡ |
| | | autoCropWidth: 200, // é»è®¤çææªå¾æ¡å®½åº¦ |
| | | autoCropHeight: 200, // é»è®¤çææªå¾æ¡é«åº¦ |
| | | fixedBox: true, // åºå®æªå¾æ¡å¤§å° ä¸å
许æ¹å |
| | | outputType:"png", // é»è®¤çææªå¾ä¸ºPNGæ ¼å¼ |
| | | filename: 'avatar' // æä»¶åç§° |
| | | }, |
| | | 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; |
| | | this.options.filename = file.name; |
| | | }; |
| | | } |
| | | }, |
| | | // ä¸ä¼ å¾ç |
| | | uploadImg() { |
| | | this.$refs.cropper.getCropBlob(data => { |
| | | let formData = new FormData(); |
| | | formData.append("avatarfile", data, this.options.filename); |
| | | 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: 50%; |
| | | top: 50%; |
| | | transform: translate(-50%, -50%); /* 使å å·å¨ä¸å¿ç¹ */ |
| | | 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; |
| | | width: 120px; /* 设置宽度 */ |
| | | height: 120px; /* 设置é«åº¦ */ |
| | | border-radius: 50%; /* ä¿æåå½¢ */ |
| | | display: flex; /* 使ç¨flexboxæ¥å±
ä¸ */ |
| | | align-items: center; /* åç´å±
ä¸ */ |
| | | justify-content: center; /* æ°´å¹³å±
ä¸ */ |
| | | } |
| | | .avatar-upload-preview { |
| | | position: relative; |
| | | top: 50%; |
| | | left: 50%; |
| | | transform: translate(-50%, -50%); |
| | | width: 200px; |
| | | height: 200px; |
| | | border-radius: 50%; |
| | | box-shadow: 0 0 4px #ccc; |
| | | overflow: hidden; |
| | | } |
| | | .img-circle { |
| | | border-radius: 50%; |
| | | } |
| | | .img-lg { |
| | | width: 120px; |
| | | height: 120px; |
| | | } |
| | | |
| | | .circular-upload-box { |
| | | width: 120px; |
| | | height: 120px; |
| | | border-radius: 50%; |
| | | background-color: #f3f4f6; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | cursor: pointer; |
| | | transition: background-color 0.3s ease; |
| | | } |
| | | |
| | | .circular-upload-box:hover { |
| | | background-color: #e5e7eb; |
| | | } |
| | | |
| | | </style> |
| | |
| | | @node-click="nodeClick"> |
| | | <span slot-scope="{ node, data }" class="el-tree-node__label"> |
| | | <span> |
| | | <i :class="data.icon"></i> |
| | | <!-- <i :class="data.icon"></i>--> |
| | | <icon-show :name="data.icon"></icon-show> |
| | | {{ (node || {}).label }} |
| | | </span> |
| | | </span> |
| | |
| | | placeholder="æ°åï¼æè¿°è¯¥æ¨¡åå¨å
¶ç¶æ¨¡åä¸çæ¾ç¤ºé¡ºåº"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="徿 ï¼"> |
| | | <avue-input-icon v-model="form.source" :disabled="!editStatus && !addStatus" :icon-list="iconList" |
| | | placeholder="è¯·éæ©å¾æ "> |
| | | </avue-input-icon> |
| | | <input-icon v-model="form.source" :disabled="!editStatus && !addStatus" placeholder="è¯·éæ©å¾æ "> |
| | | </input-icon> |
| | | </el-form-item> |
| | | <el-form-item label="æè¿°ï¼"> |
| | | <el-input v-model="form.remark" :disabled="!editStatus && !addStatus" :rows="3" placeholder="请è¾å
¥æè¿°" |
| | |
| | | } from "@/api/systemModel/mangeModel/api" |
| | | import func from "@/util/func"; |
| | | import basicOption from "@/util/basic-option"; |
| | | import iconList from "@/config/iconList"; |
| | | |
| | | export default { |
| | | name: "index", |
| | | data() { |
| | | return { |
| | | iconList: iconList, |
| | | tipList: [], |
| | | upFileType: ['xls', 'xlsx'], |
| | | fileUrl: 'api/hmSysModConfigController/importModule', |