| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalAlertWindow |
| | | v-loading="isUploading" |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="ï¼" inline> |
| | | <el-form-item label="æå±åç" prop="parentId" v-if="form.type === 15"> |
| | | <el-select v-model="form.parentId" placeholder="è¯·éæ©æå±åç" > |
| | | <el-option |
| | | v-for="item in labels()" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.name" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åç§°" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请è¾å
¥åç§°" :maxlength="5" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="å±ç¤ºå¾" prop="imgurlfull"> |
| | | <UploadAvatarImage |
| | | :file="{ 'imgurlfull': form.imgFullurl, 'imgurl': form.imgurl }" |
| | | :upload-data="{folder:'labels'}" |
| | | @uploadSuccess="uploadAvatarSuccess" |
| | | @uploadEnd="isUploading=false" |
| | | @uploadBegin="isUploading = true" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æåºç " prop="sortnum"> |
| | | <el-input type="number" v-model="form.sortnum" placeholder="请è¾å
¥æåºç " v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨" prop="info"> |
| | | <el-input type="textarea" v-model="form.info" placeholder="请è¾å
¥å¤æ³¨" :maxlength="200" v-trim/> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalAlertWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalAlertWindow from '@/components/common/GlobalAlertWindow' |
| | | import UploadAvatarImage from '@/components/common/UploadAvatarImage' |
| | | export default { |
| | | name: 'OperaLabelsWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalAlertWindow, UploadAvatarImage }, |
| | | data () { |
| | | return { |
| | | isUploading: false, |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | | id: null, |
| | | name: '', |
| | | info: '', |
| | | type: null, |
| | | status: '', |
| | | parentId: null, |
| | | sortnum: null, |
| | | imgFullurl: null, |
| | | imgurl: '' |
| | | }, |
| | | // éªè¯è§å |
| | | rules: { |
| | | parentId: [{ required: true, message: 'è¯·éæ©æå±åç' }], |
| | | name: [{ required: true, message: '请è¾å
¥åç§°', tigger: 'blur' }] |
| | | } |
| | | } |
| | | }, |
| | | inject: ['labels'], |
| | | created () { |
| | | this.config({ |
| | | api: '/business/labels', |
| | | 'field.id': 'id' |
| | | }) |
| | | }, |
| | | methods: { |
| | | open (title, target, type) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.form.imgFullurl =null |
| | | this.form.imgurl =null |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form.provinceId = '' |
| | | this.form[this.configData['field.id']] = null |
| | | this.form.type = type |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | this.form.type = type |
| | | }) |
| | | }, |
| | | // ä¸ä¼ å¾ç |
| | | uploadAvatarSuccess (file) { |
| | | this.form.imgurl = file.imgurl |
| | | this.form.imgFullurl = file.imgurlfull |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/style/alertstyle.scss"; |
| | | $image-width: 100px; |
| | | |
| | | ::v-deep .el-select { |
| | | width: 100%; |
| | | .el-input__inner { |
| | | width: 100%; |
| | | } |
| | | } |
| | | .avatar-uploader { |
| | | width: $image-width; |
| | | height: $image-width; |
| | | } |
| | | ::v-deep .el-upload { |
| | | border: 1px dashed #d9d9d9; |
| | | border-radius: 6px; |
| | | cursor: pointer; |
| | | position: relative; |
| | | width: $image-width; |
| | | height: $image-width; |
| | | overflow: hidden; |
| | | } |
| | | .avatar-uploader .el-upload:hover { |
| | | border-color: #409EFF; |
| | | } |
| | | .avatar-uploader-icon { |
| | | font-size: 28px; |
| | | color: #8c939d; |
| | | width: $image-width; |
| | | height: $image-width; |
| | | line-height: $image-width; |
| | | text-align: center; |
| | | } |
| | | .avatar { |
| | | width: $image-width; |
| | | height: $image-width; |
| | | display: block; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div style="border: 1px solid #ccc;"> |
| | | <Toolbar |
| | | style="border-bottom: 1px solid #ccc" |
| | | :editor="editor" |
| | | :defaultConfig="toolbarConfig" |
| | | :mode="mode" |
| | | /> |
| | | <Editor |
| | | style="height: 300px; overflow-y: hidden;" |
| | | v-model="content.content" |
| | | :mode="mode" |
| | | :defaultConfig="editorConfig" |
| | | @onCreated="onCreated" |
| | | @onChange="onChange" |
| | | /> |
| | | <div :style="styleEditor"> |
| | | <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" /> |
| | | <Editor style="min-height: 80px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode" |
| | | @onCreated="onCreated" @onChange="onChange" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <style src="@wangeditor/editor/dist/css/style.css"></style> |
| | | <script> |
| | | import Vue from 'vue' |
| | | import { Editor, Toolbar } from '@wangeditor/editor-for-vue' |
| | | export default { |
| | | name: 'RichEditor', |
| | | components: { Editor, Toolbar }, |
| | | import { Loading } from 'element-ui'; |
| | | let loadingInstance = null |
| | | export default Vue.extend({ |
| | | props: { |
| | | content: Object |
| | | richData: { // ç¶ç»ä»¶ä¼ éçæ°æ® |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | styleEditor: '', |
| | | readonly: false, // æ¯å¦å¯ä»¥è¾å
¥ |
| | | }, |
| | | name:'RichEditor', |
| | | components: { Editor, Toolbar }, |
| | | data() { |
| | | return { |
| | | editor: null, |
| | | html: '', |
| | | toolbarConfig: { |
| | | toolbarKeys: [ |
| | | "headerSelect", |
| | | "blockquote", |
| | | "|", |
| | | "bold", |
| | | "underline", |
| | | "italic", |
| | | toolbarConfig: { // å·¥å
·æ é
ç½® |
| | | toolbarKeys: this.readonly ? ["fullScreen"]: [ // æ¾ç¤ºæå®çèå项 |
| | | "bold", // ç²ä½ |
| | | "underline", // ä¸å线 |
| | | "italic", // æä½ |
| | | "through", // å é¤çº¿ |
| | | "code", // è¡å
代ç |
| | | "sub", // 䏿 |
| | | "sup", // 䏿 |
| | | "clearStyle", // æ¸
餿 ¼å¼ |
| | | "color", // åä½é¢è² |
| | | "bgColor", // èæ¯è² |
| | | "fontSize", // åå· |
| | | "fontFamily", // åä½ |
| | | "indent", // å¢å ç¼©è¿ |
| | | "delIndent", // åå°ç¼©è¿ |
| | | "justifyLeft", // å·¦å¯¹é½ |
| | | "justifyRight", // å³å¯¹é½ |
| | | "justifyCenter", // å±
ä¸å¯¹é½ |
| | | "justifyJustify", // ä¸¤ç«¯å¯¹é½ |
| | | "lineHeight", // è¡é« |
| | | // "viewImageLink", // æ¥ç龿¥ |
| | | "divider", // åå²çº¿ |
| | | "emotion", // 表æ
|
| | | "insertLink", // æå
¥é¾æ¥ |
| | | // "editLink", // ä¿®æ¹é¾æ¥ |
| | | // "unLink", // 忶龿¥ |
| | | // "viewLink", // æ¥ç龿¥ |
| | | "codeBlock", // 代ç å |
| | | "blockquote", // å¼ç¨ |
| | | "headerSelect", // æ é¢ |
| | | // "header1", // æ é¢1 |
| | | // "header2", // æ é¢2 |
| | | // "header3", // æ é¢3 |
| | | // "header4", // æ é¢4 |
| | | // "header5", // æ é¢5 |
| | | // "todo", // å¾
å |
| | | "redo", // éå |
| | | "undo", // æ¤é |
| | | // "enter", // å车 |
| | | // "bulletedList", // æ åºå表 |
| | | // "numberedList", // æåºå表 |
| | | // "codeSelectLang" // éæ©è¯è¨ |
| | | // è¡¨æ ¼åè½åç» |
| | | /* { |
| | | key: 'table-style', // å¿
å¡«ï¼è¦ä»¥ group å¼å¤´ |
| | | title: 'è¡¨æ ¼', // å¿
å¡« |
| | | // iconSvg: '<svg>....</svg>', // å¯é |
| | | menuKeys: [ |
| | | "insertTable", // æå
¥è¡¨æ ¼ |
| | | "deleteTable", // å é¤è¡¨æ ¼ |
| | | "insertTableRow", // æå
¥è¡ |
| | | "deleteTableRow", // å é¤è¡ |
| | | "insertTableCol", // æå
¥å |
| | | "deleteTableCol", // å é¤å |
| | | "tableHeader", // 表头 |
| | | "tableFullWidth", // 宽度èªéåº |
| | | ] // ä¸çº§èå key ï¼å¿
å¡« |
| | | },*/ |
| | | // ä¸ä¼ å¾çåç» |
| | | { |
| | | "key": "group-more-style", |
| | | "title": "æ´å¤", |
| | | "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M204.8 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z\"></path><path d=\"M505.6 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z\"></path><path d=\"M806.4 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z\"></path></svg>", |
| | | "menuKeys": [ |
| | | "through", |
| | | "code", |
| | | "sup", |
| | | "sub", |
| | | "clearStyle" |
| | | ] |
| | | key: 'img-style', // å¿
å¡«ï¼è¦ä»¥ group å¼å¤´ |
| | | title: 'å¾ç', // å¿
å¡« |
| | | // iconSvg: '<svg>....</svg>', // å¯é |
| | | menuKeys: [ |
| | | "uploadImage", // ä¸ä¼ å¾ç |
| | | "insertImage", // ç½ç»å¾ç |
| | | "deleteImage", // å é¤å¾ç |
| | | "editImage", // ç¼è¾å¾ç |
| | | "imageWidth30", // å¾ç宽度ç¸å¯¹äºç¼è¾å¨å®½åº¦çç¾åæ¯30 |
| | | "imageWidth50", // å¾ç宽度ç¸å¯¹äºç¼è¾å¨å®½åº¦çç¾åæ¯50 |
| | | "imageWidth100", // å¾ç宽度ç¸å¯¹äºç¼è¾å¨å®½åº¦çç¾åæ¯100 |
| | | ] // ä¸çº§èå key ï¼å¿
å¡« |
| | | }, |
| | | "color", |
| | | "bgColor", |
| | | "|", |
| | | "fontSize", |
| | | "fontFamily", |
| | | "lineHeight", |
| | | "|", |
| | | "bulletedList", |
| | | "numberedList", |
| | | "todo", |
| | | // è§é¢åç» |
| | | { |
| | | "key": "group-justify", |
| | | "title": "对é½", |
| | | "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 793.6v102.4H51.2v-102.4h716.8z m204.8-230.4v102.4H51.2v-102.4h921.6z m-204.8-230.4v102.4H51.2v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>", |
| | | "menuKeys": [ |
| | | "justifyLeft", |
| | | "justifyRight", |
| | | "justifyCenter", |
| | | "justifyJustify" |
| | | ] |
| | | key: 'video-style', // å¿
å¡«ï¼è¦ä»¥ group å¼å¤´ |
| | | title: 'è§é¢', // å¿
å¡« |
| | | // iconSvg: '<svg>....</svg>', // å¯é |
| | | menuKeys: [ |
| | | "insertVideo", // æå
¥ç½ç»è§é¢ |
| | | "uploadVideo", // ä¸ä¼ è§é¢ |
| | | "editVideoSize", // ä¿®æ¹è§é¢å°ºå¯¸ |
| | | ] // ä¸çº§èå key ï¼å¿
å¡« |
| | | }, |
| | | { |
| | | "key": "group-indent", |
| | | "title": "缩è¿", |
| | | "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m0-128V320l256 192z\"></path></svg>", |
| | | "menuKeys": [ |
| | | "indent", |
| | | "delIndent" |
| | | ] |
| | | }, |
| | | // "|", |
| | | "emotion", |
| | | "insertLink", |
| | | { |
| | | "key": "group-image", |
| | | "title": "å¾ç", |
| | | "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M959.877 128l0.123 0.123v767.775l-0.123 0.122H64.102l-0.122-0.122V128.123l0.122-0.123h895.775zM960 64H64C28.795 64 0 92.795 0 128v768c0 35.205 28.795 64 64 64h896c35.205 0 64-28.795 64-64V128c0-35.205-28.795-64-64-64zM832 288.01c0 53.023-42.988 96.01-96.01 96.01s-96.01-42.987-96.01-96.01S682.967 192 735.99 192 832 234.988 832 288.01zM896 832H128V704l224.01-384 256 320h64l224.01-192z\"></path></svg>", |
| | | "menuKeys": [ |
| | | "insertImage", |
| | | "uploadImage" |
| | | ] |
| | | }, |
| | | "insertTable", |
| | | "codeBlock", |
| | | "divider", |
| | | "|", |
| | | "undo", |
| | | "redo", |
| | | "|", |
| | | "fullScreen" |
| | | ] |
| | | "fullScreen", // å
¨å± |
| | | ], |
| | | excludeKeys: [ // éèæå®çèå项 |
| | | // 'headerSelect', |
| | | // 'video-style' |
| | | // æé¤èåç»ï¼åèåç» key çå¼å³å¯ |
| | | ], |
| | | |
| | | }, |
| | | editorConfig: { |
| | | editorConfig: { // ç¼è¾å¨é
ç½® |
| | | placeholder: '请è¾å
¥å
容...', |
| | | readOnly: this.readonly, // æ¯å¦åªè¯»ï¼é»è®¤false |
| | | autoFocus: false, // æ¯å¦èªå¨focusï¼é»è®¤ä¸ºtrue |
| | | scroll: true, // é
ç½®ç¼è¾å¨æ¯å¦æ¯ææ»å¨ï¼é»è®¤ä¸º true ãæ³¨æï¼æ¤æ¶ä¸è¦åºå® editor-container çé«åº¦ï¼è®¾ç½®ä¸ä¸ª min-height å³å¯ã |
| | | maxLength: 20000, // æå¤§éå¶ï¼é¿å
å
容è¿å¤å¡é¡¿ |
| | | MENU_CONF: { |
| | | // å¾çä¸ä¼ |
| | | uploadImage: { |
| | | // server: '/api/upload', |
| | | name: 'file', |
| | | server: process.env.VUE_APP_API_PREFIX + '/public/uploadPicture', |
| | | server: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload?folder=richeditor', |
| | | fieldName: 'file', |
| | | // å个æä»¶çæå¤§ä½ç§¯éå¶ï¼é»è®¤ä¸º 2M |
| | | maxFileSize: 10 * 1024 * 1024, // 10M |
| | | // æå¤å¯ä¸ä¼ å 个æä»¶ï¼é»è®¤ä¸º 100 |
| | | maxNumberOfFiles: 10, |
| | | // éæ©æä»¶æ¶çç±»åéå¶ï¼é»è®¤ä¸º ['image/*'] ãå¦ä¸æ³éå¶ï¼å设置为 [] |
| | | allowedFileTypes: ['image/*'], |
| | | // èªå®ä¹ä¸ä¼ åæ°ï¼ä¾å¦ä¼ ééªè¯ç token çãåæ°ä¼è¢«æ·»å å° formData ä¸ï¼ä¸èµ·ä¸ä¼ å°æå¡ç«¯ã |
| | | meta: { |
| | | folder: 'znzz/project_file' |
| | | }, |
| | | onBeforeUpload(file) { // JS è¯æ³ |
| | | // file éä¸çæä»¶ï¼æ ¼å¼å¦ { key: file } |
| | | // debugger |
| | | return file |
| | | // å° meta æ¼æ¥å° url åæ°ä¸ï¼é»è®¤ false |
| | | metaWithUrl: false, |
| | | // èªå®ä¹å¢å http header |
| | | // headers: { Authorization: "Bearer " + getToken() }, |
| | | // è·¨åæ¯å¦ä¼ é cookie ï¼é»è®¤ä¸º false |
| | | withCredentials: true, |
| | | // è¶
æ¶æ¶é´ï¼é»è®¤ä¸º 10 ç§ |
| | | timeout: 10 * 1000, //10 ç§ |
| | | // ä¸ä¼ å |
| | | onBeforeUpload(files) { |
| | | loadingInstance = Loading.service({ |
| | | lock: true, |
| | | text: 'ä¸ä¼ ä¸...', |
| | | spinner: 'el-icon-loading', |
| | | background: 'rgba(0, 0, 0, 0.7)' |
| | | }); |
| | | return files; |
| | | }, |
| | | // èªå®ä¹æå
¥å¾ç |
| | | customInsert(res, insertFn) { |
| | | console.log(res); |
| | | // å 为èªå®ä¹æå
¥å¯¼è´onSuccessä¸onFailedåè°å½æ°ä¸èµ·ä½ç¨,èªå·±æå¨å¤ç |
| | | // å
å
³éçå¾
çMessage |
| | | loadingInstance = Loading.service({ |
| | | lock: true, |
| | | text: 'ä¸ä¼ ä¸...', |
| | | spinner: 'el-icon-loading', |
| | | background: 'rgba(0, 0, 0, 0.7)' |
| | | }).close(); |
| | | if (res.code === 200) { |
| | | // Message.success({ |
| | | // message: `${res.data.originalName} ä¸ä¼ æå` |
| | | // }); |
| | | } else { |
| | | // Message.error({ |
| | | // message: `${res.data.originalName} ä¸ä¼ 失败ï¼è¯·éæ°å°è¯` |
| | | // }); |
| | | } |
| | | insertFn(res.data.url, res.data.originname, res.data.imgname); |
| | | }, |
| | | |
| | | // å个æä»¶ä¸ä¼ æåä¹å |
| | | onSuccess(file, res) { |
| | | console.log(`${file.name} ä¸ä¼ æå`, res) |
| | | console.log(`${file.originalFilename} ä¸ä¼ æå`, res); |
| | | }, |
| | | // å个æä»¶ä¸ä¼ 失败 |
| | | onFailed(file, res) { |
| | | console.log(`${file.originalFilename} ä¸ä¼ 失败`, res); |
| | | loadingInstance.close(); |
| | | }, |
| | | // ä¸ä¼ è¿åº¦çåè°å½æ° |
| | | onProgress(progress) { |
| | | console.log('progress', progress); |
| | | // progress æ¯ 0-100 çæ°å |
| | | }, |
| | | // ä¸ä¼ éè¯¯ï¼æè
触å timeout è¶
æ¶ |
| | | onError(file, err, res) { |
| | | console.log(`${file.name} ä¸ä¼ åºé`, err, res) |
| | | }, |
| | | loadingInstance.close(); |
| | | console.log(`${file.originalFilename} ä¸ä¼ åºé`, err, res); |
| | | } |
| | | }, |
| | | |
| | | // è§é¢ä¸ä¼ |
| | | uploadVideo: { |
| | | fieldName: 'file', |
| | | server: process.env.VUE_APP_API_PREFIX + '/public/upload?folder=richeditor', |
| | | // å个æä»¶çæå¤§ä½ç§¯éå¶ï¼é»è®¤ä¸º 10M |
| | | maxFileSize: 50 * 1024 * 1024, // 50M |
| | | // æå¤å¯ä¸ä¼ å 个æä»¶ï¼é»è®¤ä¸º 5 |
| | | maxNumberOfFiles: 3, |
| | | // éæ©æä»¶æ¶çç±»åéå¶ï¼é»è®¤ä¸º ['video/*'] ãå¦ä¸æ³éå¶ï¼å设置为 [] |
| | | allowedFileTypes: ['video/*'], |
| | | // èªå®ä¹ä¸ä¼ åæ°ï¼ä¾å¦ä¼ ééªè¯ç token çãåæ°ä¼è¢«æ·»å å° formData ä¸ï¼ä¸èµ·ä¸ä¼ å°æå¡ç«¯ã |
| | | meta: { |
| | | // token: 'xxx', |
| | | // otherKey: 'yyy' |
| | | }, |
| | | // å° meta æ¼æ¥å° url åæ°ä¸ï¼é»è®¤ false |
| | | metaWithUrl: false, |
| | | |
| | | // èªå®ä¹å¢å http header |
| | | headers: { |
| | | // Authorization: "Bearer " + getToken() |
| | | // otherKey: 'xxx' |
| | | }, |
| | | // è·¨åæ¯å¦ä¼ é cookie ï¼é»è®¤ä¸º false |
| | | withCredentials: true, |
| | | // è¶
æ¶æ¶é´ï¼é»è®¤ä¸º 30 ç§ |
| | | timeout: 1000 * 1000, // 1000 ç§, |
| | | // ä¸ä¼ ä¹å触å |
| | | onBeforeUpload(file) { |
| | | return file; |
| | | }, |
| | | // èªå®ä¹æå
¥è§é¢ |
| | | customInsert(res, insertFn) { |
| | | // å 为èªå®ä¹æå
¥å¯¼è´onSuccessä¸onFailedåè°å½æ°ä¸èµ·ä½ç¨,èªå·±æå¨å¤ç |
| | | // å
å
³éçå¾
çMessage |
| | | // Message.closeAll(); |
| | | if (res.code === 200) { |
| | | // Message.success({ |
| | | // message: `${res.data.originalName} ä¸ä¼ æå` |
| | | // }); |
| | | } else { |
| | | // Message.error({ |
| | | // message: `${res.data.originalName} ä¸ä¼ 失败ï¼è¯·éæ°å°è¯` |
| | | // }); |
| | | } |
| | | insertFn(res.data.url, res.data.url); |
| | | }, |
| | | // ä¸ä¼ è¿åº¦çåè°å½æ° |
| | | onProgress(progress) { |
| | | console.log(progress); |
| | | // onProgress(progress) { // JS è¯æ³ |
| | | // progress æ¯ 0-100 çæ°å |
| | | }, |
| | | // // å个æä»¶ä¸ä¼ æåä¹å |
| | | // onSuccess(file, res) { |
| | | // console.log(`${file.name} ä¸ä¼ æå`, res); |
| | | // this.successMsg(file); |
| | | // }, |
| | | // // å个æä»¶ä¸ä¼ 失败 |
| | | // onFailed(file, res) { |
| | | // console.log(`${file.name} ä¸ä¼ 失败`, res); |
| | | // this.errorMsg(file); |
| | | // }, |
| | | // ä¸ä¼ éè¯¯ï¼æè
触å timeout è¶
æ¶ |
| | | onError(file, err, res) { |
| | | console.log(`${file.name} ä¸ä¼ åºé`, err, res); |
| | | // Notification.error({ |
| | | // title: 'é误', |
| | | // message: `${file.name} ä¸ä¼ 失败ï¼è¯·éæ°å°è¯` |
| | | // }); |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | mode: 'default', // or 'simple' |
| | | } |
| | | }, |
| | | |
| | | |
| | | watch: { |
| | | richData: function (value) { |
| | | this.html = value |
| | | }, |
| | | readonly: function (value) { |
| | | this.readonly = value |
| | | }, |
| | | styleEditor: function (value) { |
| | | this.styleEditor = value |
| | | }, |
| | | }, |
| | | mounted() { |
| | | // éè¦å¨ç¼è¾å¨åå»ºå®æ¯åå¨èµå¼ |
| | | this.$nextTick(()=>{ |
| | | this.html = this.richData |
| | | }) |
| | | }, |
| | | methods: { |
| | | // ç¼è¾å¨åå»ºå®æ¯æ¶çåè°å½æ° |
| | | onCreated(editor) { |
| | | this.editor = Object.seal(editor) // ä¸å®è¦ç¨ Object.seal() ï¼å¦å伿¥é |
| | | }, |
| | | // ç¼è¾å¨å
容ãéåºååæ¶çåè°å½æ° |
| | | onChange(editor) { |
| | | this.$emit('getWangedditor', editor.getHtml()) |
| | | console.log("onChange", editor.getHtml()); // onChange æ¶è·åç¼è¾å¨ææ°å
容 |
| | | }, |
| | | }, |
| | | beforeDestroy() { |
| | | // ç¼è¾å¨éæ¯æ¶çåè°å½æ°ãè°ç¨ editor.destroy() å³å¯éæ¯ç¼è¾å¨ |
| | | const editor = this.editor |
| | | if (editor == null) return |
| | | editor.destroy() // ç»ä»¶éæ¯æ¶ï¼åæ¶éæ¯ç¼è¾å¨ |
| | | }, |
| | | methods: { |
| | | onCreated (editor) { |
| | | this.editor = Object.seal(editor) |
| | | }, |
| | | onChange (editor) { |
| | | // debugger |
| | | this.$emit('edit', this.content.content) |
| | | // this.value = this.html |
| | | // console.log(this.content); |
| | | }, |
| | | |
| | | // onBlur (editor) { |
| | | // console.log('onBlur', editor) |
| | | // this.$emit('edit', this.html) |
| | | // }, |
| | | }, |
| | | |
| | | } |
| | | } |
| | | }) |
| | | </script> |
| | | |
| | | <style src="@wangeditor/editor/dist/css/style.css"></style> |
| | | <style lang="scss"> |
| | | </style>> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-upload |
| | | class="upload-demo" |
| | | :accept="uploadData.fileType" |
| | | :action="uploadImgUrl" |
| | | :limit="this.fileLength" |
| | | :on-exceed="handleExceed" |
| | | :on-success="handleFileSuccess" |
| | | :on-error="uploadError" |
| | | :before-upload="beforeFileUpload" |
| | | :file-list="fileList"> |
| | | <el-button size="small" type="primary">ç¹å»ä¸ä¼ </el-button> |
| | | <div slot="tip" class="el-upload__tip" > |
| | | åªè½ä¸ä¼ {{ this.fileLength }}个æä»¶, |
| | | {{uploadData.fileType?('åªæ¯æä¸ä¼ ã'+uploadData.fileType+'ãç±»åæä»¶'):''}} |
| | | æä»¶å¤§å°ä¸è½è¶
è¿30MB, |
| | | æ°éè¶
è¿è¯·å é¤å·²ä¼ éä»¶éæ°ä¸ä¼ |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | file: { |
| | | type: Object, |
| | | default: () => {} |
| | | }, |
| | | tipsLabel: '', |
| | | customStyle: { |
| | | type: String, |
| | | default: 'width: 190px; height: 190px;' |
| | | }, |
| | | fileLength:{ |
| | | type: Number, |
| | | default: () => 1 |
| | | }, |
| | | uploadData: Object |
| | | }, |
| | | data() { |
| | | return { |
| | | fileList: [], |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload?folder='+this.uploadData.folder |
| | | } |
| | | }, |
| | | |
| | | methods: { |
| | | // ä¸ä¼ å¾ç |
| | | handleExceed(){ |
| | | if(this.fileList && this.fileList.length >= this.fileLength){ |
| | | this.$message.error('åªå
许ä¸ä¼ ã'+this.fileLength+'个éä»¶ã') |
| | | } |
| | | }, |
| | | handleFileSuccess(res, file) { |
| | | if (res.code == 200) { |
| | | let { data } = res |
| | | this.fileList = [{name: data.originname, url: data.url }] |
| | | this.$message.success('ä¸ä¼ æå') |
| | | this.$emit('uploadSuccess', { fileurl: data.imgaddr, fileurlFull: data.url, name: data.originname,fileSize:data.fileSize }) |
| | | } else { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | } |
| | | this.$emit('uploadEnd') |
| | | }, |
| | | uploadError() { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$emit('uploadEnd') |
| | | }, |
| | | // |
| | | beforeFileUpload(file) { |
| | | if(this.fileList && this.fileList.length >= this.fileLength){ |
| | | this.$message.error('åªå
许ä¸ä¼ ã'+this.fileLength+'个æä»¶ã') |
| | | return false; |
| | | } |
| | | const isLt2M = file.size / 1024 / 1024 <= 30; // æ£æ¥æä»¶å¤§å°æ¯å¦å°äº30MB |
| | | if (!isLt2M) { |
| | | this.$message.error('ä¸ä¼ æä»¶å¤§å°ä¸è½è¶
è¿ 30MB!'); |
| | | return false; // ä¸å
许ä¸ä¼ è¶
è¿æå®å¤§å°çæä»¶ |
| | | } |
| | | this.$emit('uploadBegin') |
| | | return true |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | $image-width: 100px; |
| | | $image-height: 30px; |
| | | .avatar-uploader { |
| | | width: 100px; |
| | | height: $image-width; |
| | | } |
| | | ::v-deep .el-upload { |
| | | border: 1px dashed #d9d9d9; |
| | | border-radius: 6px; |
| | | cursor: pointer; |
| | | position: relative; |
| | | width: $image-width; |
| | | height: $image-height; |
| | | overflow: hidden; |
| | | } |
| | | .avatar-uploader .el-upload:hover { |
| | | border-color: #409EFF; |
| | | } |
| | | .avatar-uploader-icon { |
| | | line-height: 90px; |
| | | font-size: 28px; |
| | | color: #8c939d; |
| | | width: $image-width; |
| | | height: $image-height; |
| | | text-align: center; |
| | | } |
| | | .avatar { |
| | | width: $image-width; |
| | | height: $image-height; |
| | | display: block; |
| | | } |
| | | .tips-style { |
| | | height: 13px; |
| | | font-size: 13px; |
| | | font-weight: 400; |
| | | color: #999999; |
| | | line-height: 13px; |
| | | } |
| | | </style> |
| | | <style lang="scss" scoped> |
| | | ::v-deep .el-upload--picture-card{ |
| | | width: 90px !important; |
| | | height: 90px !important; |
| | | } |
| | | |
| | | .icon { |
| | | -webkit-transform: translate(-50%,-50%); |
| | | -ms-transform: translate(-50%,-50%); |
| | | transform: translate(0%, -85%); |
| | | } |
| | | ::v-deep .el-upload-list__item { |
| | | width: 500px !important; |
| | | height: 30px !important; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="dictName + 'æ°æ®ç®¡ç'" |
| | | width="78%" |
| | | :visible.sync="visible" |
| | | :with-footer="false" |
| | | :title="dictName + 'æ°æ®ç®¡ç'" |
| | | width="78%" |
| | | :visible.sync="visible" |
| | | :with-footer="false" |
| | | > |
| | | <TableLayout :with-breadcrumb="false"> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | |
| | | <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete">å é¤</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | @selection-change="handleSelectionChange" |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | class="no-scroll" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="label" label="æ°æ®æ ç¾" min-width="100px"></el-table-column> |
| | | <el-table-column prop="code" label="æ°æ®å¼" min-width="100px"></el-table-column> |
| | | <el-table-column prop="code" label="æ°æ®å¼" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.code || row.code.length>500" > |
| | | <el-button type="text" @click="showCode(row)" >ç¹å»æ¥ç</el-button> |
| | | </div> |
| | | <div v-else>{{row.code}}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="disabled" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}">{{row.disabled | disabledText}}</template> |
| | | </el-table-column> |
| | |
| | | <el-table-column prop="updateUser" label="æ´æ°äºº" min-width="100px"> |
| | | <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="remark" label="说æ" min-width="100px"></el-table-column> |
| | | <el-table-column prop="createTime" label="å建æ¶é´" min-width="100px"></el-table-column> |
| | | <el-table-column prop="updateTime" label="æ´æ°æ¶é´" min-width="100px"></el-table-column> |
| | | <el-table-column |
| | | label="æä½" |
| | | min-width="120" |
| | | fixed="right" |
| | | label="æä½" |
| | | min-width="120" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaDictDataWindow.open('ç¼è¾åå
¸æ°æ®', dictId, row)" icon="el-icon-edit">ç¼è¾</el-button> |
| | | <el-button type="text" @click="$refs.operaDictDataWindow.open('ç¼è¾åå
¸æ°æ®', searchForm.dictId, row)" icon="el-icon-edit">ç¼è¾</el-button> |
| | | <el-button type="text" @click="deleteById(row)" icon="el-icon-delete">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | ></pagination> |
| | | </template> |
| | | <!-- æ°å»º/ä¿®æ¹ --> |
| | | <OperaDictDataWindow ref="operaDictDataWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/> |
| | | |
| | | <el-dialog |
| | | class="center-title" |
| | | title="åå
¸å¼" |
| | | width="70%" |
| | | height="70%" |
| | | text="åå
¸å¼" |
| | | :visible.sync="visible1" |
| | | append-to-body |
| | | > |
| | | <div class="agree-list" v-html="agreement"> |
| | | </div> |
| | | <template v-slot:footer> |
| | | <el-button @click="visible1=false">è¿å</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </TableLayout> |
| | | </GlobalWindow> |
| | | </template> |
| | |
| | | data () { |
| | | return { |
| | | visible: false, |
| | | visible1: false, |
| | | agreement: '', |
| | | searchForm: { |
| | | // åå
¸ID |
| | | dictId: null |
| | |
| | | this.dictName = dictName |
| | | this.visible = true |
| | | this.search() |
| | | }, |
| | | showCode(row){ |
| | | this.agreement=row.code |
| | | this.visible1=true |
| | | } |
| | | }, |
| | | created () { |
| | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .agree-list{ |
| | | height: 550px; |
| | | //max-height: 50%; |
| | | overflow: auto; |
| | | } |
| | | .no-scroll { |
| | | overflow: hidden !important; |
| | | } |
| | | /deep/ .window__body { |
| | | .table-content { |
| | | padding: 0; |
| | |
| | | padding-top: 0; |
| | | } |
| | | } |
| | | |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <GlobalAlertWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking.create" |
| | | @confirm="confirm" |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking.create" |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <el-form-item label="æ°æ®è¯´æ" prop="label" required> |
| | | <el-input v-model="form.remark" placeholder="请è¾å
¥æ°æ®è¯´æ" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="æ°æ®æ ç¾" prop="label" required> |
| | | <el-input v-model="form.label" placeholder="请è¾å
¥æ°æ®æ ç¾" v-trim maxlength="50"/> |
| | | <el-input v-model="form.label" placeholder="请è¾å
¥æ°æ®æ ç¾" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦å¯ææ¬" prop="istext" > |
| | | <el-radio-group v-model="form.istext"> |
| | | <el-radio :label="0" value="0">ææ¬</el-radio> |
| | | <el-radio :label="1" value="1">å¾ç|æä»¶</el-radio> |
| | | <el-radio :label="2" value="2">坿æ¬</el-radio> |
| | | </el-radio-group> |
| | | <!-- <el-switch v-model="form.istext" :active-value="true" :inactive-value="false"/> |
| | | <span class="status-text">{{form.istext | disabledText1}}</span>--> |
| | | </el-form-item> |
| | | <el-form-item label="æ°æ®å¼" prop="code" required> |
| | | <el-input v-model="form.code" placeholder="请è¾å
¥æ°æ®å¼" v-trim maxlength="50"/> |
| | | <template v-if="form.istext == 1" > |
| | | <UploadFile :uploadData="{ folder: 'richeditor',fileType:'' }" :fileList="fileList" @uploadSuccess="fileUploaded" /> |
| | | <el-input readonly v-model="form.code" placeholder="宿´æ°æ®å¼" v-trim/> |
| | | </template> |
| | | <RichEditor v-if="form.istext == 2" :richData="form.code" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/> |
| | | <el-input v-if="form.istext == 0" v-model="form.code" placeholder="请è¾å
¥æ°æ®å¼" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="ç¶æ" prop="disabled" required class="form-item-status"> |
| | | <el-switch v-model="form.disabled" :active-value="false" :inactive-value="true"/> |
| | | <span class="status-text">{{form.disabled | disabledText}}</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalAlertWindow> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalAlertWindow from '@/components/common/GlobalAlertWindow' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import RichEditor from '@/components/common/RichEditor' |
| | | import UploadFile from "@/components/common/UploadFile" |
| | | export default { |
| | | name: 'OperaDictDataWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalAlertWindow }, |
| | | components: {UploadFile, GlobalWindow,RichEditor }, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | styleEditor:'border: 1px solid #ccc;display: inline-block;', |
| | | form: { |
| | | id: null, |
| | | dictId: null, |
| | | code: '', |
| | | label: '', |
| | | disabled: false |
| | | disabled: false, |
| | | istext: 0, |
| | | remark: '' |
| | | }, |
| | | fileList: [], |
| | | // éªè¯è§å |
| | | rules: { |
| | | label: [ |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | fileUploaded(data){ |
| | | this.form.code = data.fileurlFull |
| | | }, |
| | | getWangedditor(val){ |
| | | this.form.code =val |
| | | }, |
| | | /** |
| | | * @title çªå£æ é¢ |
| | | * @dict æå±åå
¸ID |
| | |
| | | open (title, dictId, target) { |
| | | this.title = title |
| | | this.visible = true |
| | | |
| | | this.form.istext = 0 |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form.id = null |
| | | this.form.dictId = dictId |
| | | this.form.istext=0 |
| | | }) |
| | | return |
| | | } |
| | |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | this.form.dictId = dictId |
| | | this.form.istext = 0 |
| | | } |
| | | }) |
| | | } |
| | |
| | | <template> |
| | | <GlobalAlertWindow |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <el-form-item label="åå
¸ç¼ç " prop="code" required> |
| | | <el-input v-model="form.code" placeholder="请è¾å
¥åå
¸ç¼ç " v-trim maxlength="50"/> |
| | | <el-input v-model="form.code" placeholder="请è¾å
¥åå
¸ç¼ç " v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åå
¸åç§°" prop="name" required> |
| | | <el-input v-model="form.name" placeholder="请è¾å
¥åå
¸åç§°" v-trim maxlength="50"/> |
| | | <el-input v-model="form.name" placeholder="请è¾å
¥åå
¸åç§°" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨" prop="remark"> |
| | | <el-input v-model="form.remark" type="textarea" placeholder="请è¾å
¥å¤æ³¨" :rows="3" v-trim maxlength="500"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalAlertWindow> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalAlertWindow from '@/components/common/GlobalAlertWindow' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | export default { |
| | | name: 'OperaDictWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalAlertWindow }, |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | |
| | | <el-table-column prop="name" label="åçåç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="sortnum" label="æåºç (ååº)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="createDate" label="å建æ¶é´" min-width="100px"></el-table-column> |
| | | <el-table-column prop="status" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-switch |
| | | v-model="row.status" |
| | | :active-value="1" |
| | | :inactive-value="0" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | @change="statusChange(row)" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:productlabel:update', 'business:productlabel:delete'])" |
| | | label="æä½" |
| | |
| | | 'field.main': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | statusChange (row) { |
| | | this.api.updateById({ id: row.id, status: row.status }) |
| | | .then(() => { |
| | | this.$message.success('æä½æå') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error('æä½æå') |
| | | }) |
| | | .then(() => { |
| | | this.handlePageChange() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <el-table-column prop="name" label="åç±»åç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="sortnum" label="æåºç (ååº)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="createDate" label="å建æ¶é´" min-width="100px"></el-table-column> |
| | | <el-table-column prop="status" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-switch |
| | | v-model="row.status" |
| | | :active-value="1" |
| | | :inactive-value="0" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | @change="statusChange(row)" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:productlabel:update', 'business:productlabel:delete'])" |
| | | label="æä½" |
| | |
| | | 'field.main': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | statusChange (row) { |
| | | this.api.updateById({ id: row.id, status: row.status }) |
| | | .then(() => { |
| | | this.$message.success('æä½æå') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error('æä½æå') |
| | | }) |
| | | .then(() => { |
| | | this.handlePageChange() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:labels:query']"> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="éç¨åçåç§°" prop="name"> |
| | | <el-input v-model="searchForm.name" placeholder="请è¾å
¥éç¨åçåç§°" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | </section> |
| | | </el-form> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:labels:create', 'business:labels:delete']"> |
| | | <li><el-button type="primary" @click="$refs.operaLabelsWindow.open('æ°å»ºéç¨åçä¿¡æ¯è¡¨',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:labels:create']">æ°å»º</el-button></li> |
| | | <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:labels:delete']">å é¤</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | border |
| | | stripe |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="name" label="éç¨åçåç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="imgurlfull" label="å±ç¤ºå¾" align="center" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-image style="max-width: 100px;max-height: 50px;" v-if="row.imgFullurl" :src="row.imgFullurl" :preview-src-list="[row.imgFullurl]"></el-image> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="sortnum" label="æåºç " min-width="100px"></el-table-column> |
| | | <el-table-column prop="editDate" label="æè¿æ¶é´" min-width="100px"></el-table-column> |
| | | <el-table-column prop="status" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-switch |
| | | v-model="row.status" |
| | | :active-value="1" |
| | | :inactive-value="0" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | @change="statusChange(row)" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:labels:update', 'business:labels:delete'])" |
| | | label="æä½" |
| | | min-width="120" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaLabelsWindow.open('ç¼è¾éç¨åçä¿¡æ¯è¡¨', row,searchForm.type)" icon="el-icon-edit" v-permissions="['business:labels:update']">ç¼è¾</el-button> |
| | | <el-button style="color: red" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:labels:delete']">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | > |
| | | </pagination> |
| | | </template> |
| | | <!-- æ°å»º/ä¿®æ¹ --> |
| | | <OperaLabelsWindow ref="operaLabelsWindow" @success="handlePageChange"/> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaLabelsWindow from '@/components/business/OperaLabelsZhuanquWindow' |
| | | import { updateById } from '@/api/business/goods' |
| | | export default { |
| | | name: 'Labels', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaLabelsWindow }, |
| | | data () { |
| | | return { |
| | | // æç´¢ |
| | | searchForm: { |
| | | name: '', |
| | | type: 14 |
| | | }, |
| | | labels: [] |
| | | } |
| | | }, |
| | | provide () { |
| | | return { |
| | | labels: () => this.labels |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: 'éç¨åçä¿¡æ¯è¡¨', |
| | | api: '/business/labels', |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | statusChange (row) { |
| | | this.api.updateById({ id: row.id, status: row.status }) |
| | | .then(() => { |
| | | this.$message.success('æä½æå') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error('æä½æå') |
| | | }) |
| | | .then(() => { |
| | | this.handlePageChange() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:labels:query']"> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="åçç³»ååç§°" prop="name"> |
| | | <el-input v-model="searchForm.name" placeholder="请è¾å
¥åçç³»ååç§°" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æå±åç" prop="parentId"> |
| | | <el-select v-model="searchForm.parentId" placeholder="è¯·éæ©æå±åç" @change="search" > |
| | | <el-option |
| | | v-for="item in labels" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.name" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | </section> |
| | | </el-form> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:labels:create', 'business:labels:delete']"> |
| | | <li><el-button type="primary" @click="$refs.operaLabelsWindow.open('æ°å»ºåçç³»åä¿¡æ¯è¡¨',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:labels:create']">æ°å»º</el-button></li> |
| | | <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:labels:delete']">å é¤</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | border |
| | | stripe |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="name" label="åçç³»ååç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="parentName" label="æå±åç" min-width="100px"></el-table-column> |
| | | <el-table-column prop="imgurlfull" label="å±ç¤ºå¾" align="center" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-image style="max-width: 100px;max-height: 50px;" v-if="row.imgFullurl" :src="row.imgFullurl" :preview-src-list="[row.imgFullurl]"></el-image> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="sortnum" label="æåºç " min-width="100px"></el-table-column> |
| | | <el-table-column prop="editDate" label="æè¿æ¶é´" min-width="100px"></el-table-column> |
| | | <el-table-column prop="status" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-switch |
| | | v-model="row.status" |
| | | :active-value="1" |
| | | :inactive-value="0" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | @change="statusChange(row)" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:labels:update', 'business:labels:delete'])" |
| | | label="æä½" |
| | | min-width="120" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaLabelsWindow.open('ç¼è¾åçç³»åä¿¡æ¯è¡¨', row,searchForm.type)" icon="el-icon-edit" v-permissions="['business:labels:update']">ç¼è¾</el-button> |
| | | <el-button style="color: red" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:labels:delete']">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | > |
| | | </pagination> |
| | | </template> |
| | | <!-- æ°å»º/ä¿®æ¹ --> |
| | | <OperaLabelsWindow ref="operaLabelsWindow" @success="handlePageChange"/> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaLabelsWindow from '@/components/business/OperaLabelsZhuanquWindow' |
| | | import { findAll as labelList } from '@/api/business/labels' |
| | | export default { |
| | | name: 'Labels', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaLabelsWindow }, |
| | | data () { |
| | | return { |
| | | // æç´¢ |
| | | labels: [], |
| | | searchForm: { |
| | | name: '', |
| | | parentId: null, |
| | | type: 15 |
| | | } |
| | | } |
| | | }, |
| | | provide() { |
| | | return { |
| | | labels: () => this.labels |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: 'åçç³»åä¿¡æ¯è¡¨', |
| | | api: '/business/labels', |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.loadLabels() |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | loadLabels () { |
| | | labelList({type: 14}) |
| | | .then(res => { |
| | | this.labels = res |
| | | }) |
| | | }, |
| | | statusChange (row) { |
| | | this.api.updateById({ id: row.id, status: row.status }) |
| | | .then(() => { |
| | | this.$message.success('æä½æå') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error('æä½æå') |
| | | }) |
| | | .then(() => { |
| | | this.handlePageChange() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:labels:query']"> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="ä¸åºåç§°" prop="name"> |
| | | <el-input v-model="searchForm.name" placeholder="请è¾å
¥åç§°" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | </section> |
| | | </el-form> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:labels:create', 'business:labels:delete']"> |
| | | <li><el-button type="primary" @click="$refs.operaLabelsWindow.open('æ°å»ºä¸åºä¿¡æ¯è¡¨',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:labels:create']">æ°å»º</el-button></li> |
| | | <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:labels:delete']">å é¤</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | border |
| | | stripe |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="name" label="ä¸åºåç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="imgurlfull" label="å±ç¤ºå¾" align="center" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-image v-if="row.imgFullurl" style="max-width: 100px;max-height: 50px;" :src="row.imgFullurl" :preview-src-list="[row.imgFullurl]"></el-image> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="goodsNum" label="ååæ°é" align="center" min-width="100px"></el-table-column> |
| | | <el-table-column prop="sortnum" label="æåºç " min-width="100px"></el-table-column> |
| | | <el-table-column prop="editDate" label="æè¿æ¶é´" min-width="100px"></el-table-column> |
| | | <el-table-column prop="status" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <el-switch |
| | | v-model="row.status" |
| | | :active-value="1" |
| | | :inactive-value="0" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | @change="statusChange(row)" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:labels:update', 'business:labels:delete'])" |
| | | label="æä½" |
| | | min-width="120" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaLabelsWindow.open('ç¼è¾ä¸åºä¿¡æ¯è¡¨', row,searchForm.type)" icon="el-icon-edit" v-permissions="['business:labels:update']">ç¼è¾</el-button> |
| | | <el-button style="color: red" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:labels:delete']">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | > |
| | | </pagination> |
| | | </template> |
| | | <!-- æ°å»º/ä¿®æ¹ --> |
| | | <OperaLabelsWindow ref="operaLabelsWindow" @success="handlePageChange"/> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaLabelsWindow from '@/components/business/OperaLabelsZhuanquWindow' |
| | | export default { |
| | | name: 'Labels', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaLabelsWindow }, |
| | | data () { |
| | | return { |
| | | // æç´¢ |
| | | searchForm: { |
| | | name: '', |
| | | type: 12 |
| | | }, |
| | | labels:[] |
| | | } |
| | | }, |
| | | provide() { |
| | | return { |
| | | labels: () => this.labels |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: 'ä¸åºä¿¡æ¯è¡¨', |
| | | api: '/business/labels', |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | statusChange (row) { |
| | | this.api.updateById({ id: row.id, status: row.status }) |
| | | .then(() => { |
| | | this.$message.success('æä½æå') |
| | | }) |
| | | .catch(e => { |
| | | this.$message.error('æä½æå') |
| | | }) |
| | | .then(() => { |
| | | this.handlePageChange() |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | |
| | | public static final int TWO = 2 ; |
| | | public static final int THREE = 3 ; |
| | | public static final int FOUR = 4 ; |
| | | public static final String LABELS_IMG ="LABELS_IMG" ; |
| | | |
| | | /** |
| | | * mq tag |
| | | */ |
| | |
| | | @ApiModelProperty(value = "æ°æ®å¼") |
| | | @NotBlank(message = "æ°æ®å¼ä¸è½ä¸ºç©º", groups = {OperaType.Create.class, OperaType.Update.class}) |
| | | private String code; |
| | | @ApiModelProperty(value = "夿³¨") |
| | | private String remark; |
| | | |
| | | @ApiModelProperty(value = "æ°æ®æ ç¾") |
| | | @NotBlank(message = "æ°æ®æ ç¾ä¸è½ä¸ºç©º", groups = {OperaType.Create.class, OperaType.Update.class}) |
| | |
| | | IPage<Labels> result = labelsJoinMapper.selectJoinPage(page,Labels.class, queryWrapper); |
| | | /* String resourcePath=systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode();*/ |
| | | if(org.apache.commons.collections.CollectionUtils.isNotEmpty(result.getRecords())){ |
| | | String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode() |
| | | + systemDictDataBiz.queryByCode(Constants.OSS,Constants.LABELS_IMG).getCode(); |
| | | for(Labels model:result.getRecords()){ |
| | | if(model.getParentId()==null){ |
| | | model.setTypeLevel(0); |
| | | }else{ |
| | | model.setTypeLevel(1); |
| | | } |
| | | if(StringUtils.isNotBlank(model.getImgurl())){ |
| | | model.setImgFullurl(path + model.getImgurl()); |
| | | } |
| | | if(Constants.equalsInteger(model.getType(),Constants.LabelsType.BIG_AREA.getKey())){ |
| | | //妿æ¯å¤§åºä¿¡æ¯ï¼æ¥è¯¢ææç»å®é¢çä»½ä¿¡æ¯ |
| | | model.setAreaList(areasMapper.selectList(new LambdaQueryWrapper<Areas>() |
| | |
| | | </resultMap> |
| | | <select id="selectManageList" parameterType="com.doumee.dao.system.dto.QuerySystemDictDataDTO" resultMap="SystemDictDataListVO"> |
| | | SELECT |
| | | dict_data.`ID`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`, dict_data.`SORT`, dict_data.`DISABLED`, dict_data.`CREATE_TIME`, dict_data.`UPDATE_TIME`, dict_data.`CREATE_USER`, dict_data.`UPDATE_USER`, |
| | | dict_data.`ID`, dict_data.`remark`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`, dict_data.`SORT`, dict_data.`DISABLED`, dict_data.`CREATE_TIME`, dict_data.`UPDATE_TIME`, dict_data.`CREATE_USER`, dict_data.`UPDATE_USER`, |
| | | create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME, |
| | | update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME |
| | | FROM SYSTEM_DICT_DATA dict_data |