From c26deaa0190c0ed42b398f3e5696013127a6c10f Mon Sep 17 00:00:00 2001 From: 小小儁爺 <1694218219@qq.com> Date: 星期二, 11 三月 2025 16:17:51 +0800 Subject: [PATCH] 1.看板修改 --- src/views/basicSettings/processRoute.vue | 2043 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 1,024 insertions(+), 1,019 deletions(-) diff --git a/src/views/basicSettings/processRoute.vue b/src/views/basicSettings/processRoute.vue index 8803191..e279397 100644 --- a/src/views/basicSettings/processRoute.vue +++ b/src/views/basicSettings/processRoute.vue @@ -1,1019 +1,1024 @@ -<template> - <div> - <div class="body" :style="{height:mainHeight+'px'}"> - - <div class="bodyTopButtonGroup"> - <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">鏂板</el-button> - <!-- <el-button v-waves type="primary" icon="el-icon-upload2" @click="upload">瀵煎叆</el-button>--> - </div> - - <div class="bodyTopFormGroup"> - <el-form - ref="form" - :model="form" - label-width="100px" - inline - style="display: flex;" - > - <div class="elForm"> - <el-form-item label="宸ヨ壓璺嚎缂栫爜" style=" display: flex;"> - <el-input v-model="form.routecode" placeholder="璇疯緭鍏�" style="width: 200px" /> - </el-form-item> - <el-form-item label="宸ヨ壓鍚嶇О" style=" display: flex;"> - <el-input v-model="form.routename" placeholder="璇疯緭鍏�" style="width: 200px" /> - </el-form-item> - <el-form-item label="宸ヨ壓鎻忚堪" style=" display: flex;"> - <el-input v-model="form.description" placeholder="璇疯緭鍏�" style="width: 200px" /> - </el-form-item> - <el-form-item label="鍒涘缓浜哄憳" style=" display: flex;"> - <el-input v-model="form.createuser" style="width: 200px" placeholder="璇疯緭鍏�" /> - </el-form-item> - </div> - <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"> - <el-button v-waves type="primary" icon="el-icon-search" @click="search">鏌ヨ</el-button> - <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">閲嶇疆</el-button> - </div> - </el-form> - <div - class="bodyTopFormExpand" - /> - </div> - - <div class="elTableDiv"> - <!-- <TableColumnSettings--> - <!-- :list1="tableColumnSettingsArray"--> - <!-- @tableColumnUpdate="tableColumnUpdate"--> - <!-- />--> - <el-table - ref="tableDataRef" - :key="tableTimeStampKey" - class="tableFixed" - :data="tableData" - :height="tableHeight" - border - :row-class-name="tableRowClassName" - :style="{width: 100+'%',height:tableHeight+'px',}" - highlight-current-row - :header-cell-style="this.$headerCellStyle" - :cell-style="this.$cellStyle" - @sort-change="sortChange" - > - - <el-table-column - v-for="item in tableColumnSettingsArray" - v-if="item.show" - :key="item.id" - :sortable="item.sortable" - :prop="item.prop" - :min-width="item.minWidth" - :label="item.label" - :width="item.width" - show-tooltip-when-overflow - :fixed="item.fixed?(item.fixed==='left'?'left':'right'):false" - > - <template slot-scope="{row}"> - <div v-if="!row[item.prop]">/</div> - <div v-else-if="item.prop==='enable'"> - <div v-if="row[item.prop]==='Y'"> - <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" /> - 鏄� - </div> - <div v-if="row[item.prop]==='N'"> - <i class="el-icon-info" style="margin-right: 2px" /> - 鍚� - </div> - </div> - <div v-else>{{ row[item.prop] }}</div> - </template> - </el-table-column> - - <!-- <el-table-column--> - <!-- type="selection"--> - <!-- width="50"--> - <!-- />--> - <!-- <el-table-column--> - <!-- prop="RowNum"--> - <!-- width="50"--> - <!-- label="搴忓彿"--> - <!-- fixed--> - <!-- />--> - <!-- <el-table-column--> - <!-- prop="code"--> - <!-- label="缂栫爜"--> - <!-- show-tooltip-when-overflow--> - <!-- sortable="custom"--> - <!-- />--> - <!-- <el-table-column--> - <!-- prop="name"--> - <!-- show-tooltip-when-overflow--> - <!-- label="鍚嶇О"--> - <!-- sortable="custom"--> - <!-- />--> - <!-- <el-table-column--> - <!-- prop="description"--> - <!-- label="宸ヨ壓璺嚎鎻忚堪"--> - <!-- sortable="custom"--> - <!-- show-tooltip-when-overflow--> - <!-- >--> - <!-- <template slot-scope="{row}">--> - <!-- <div v-if="row.description">{{ row.description }}</div>--> - <!-- <div v-else>/</div>--> - <!-- </template>--> - <!-- </el-table-column>--> - <!-- <el-table-column--> - <!-- prop="enable"--> - <!-- show-tooltip-when-overflow--> - <!-- label="浣跨敤鐘舵��"--> - <!-- sortable="custom"--> - <!-- >--> - <!-- <template slot-scope="{row}">--> - <!-- <div v-if="row.enable==='Y'">--> - <!-- <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />--> - <!-- 鏄�--> - <!-- </div>--> - <!-- <div v-if="row.enable==='N'">--> - <!-- <i class="el-icon-info" style="margin-right: 2px" />--> - <!-- 鍚�--> - <!-- </div>--> - <!-- </template>--> - <!-- </el-table-column>--> - <!-- <el-table-column--> - <!-- prop="lm_user"--> - <!-- show-tooltip-when-overflow--> - <!-- label="鍒涘缓浜哄憳"--> - <!-- sortable="custom"--> - <!-- />--> - <!-- <el-table-column--> - <!-- prop="lm_date"--> - <!-- label="鍒涘缓鏃堕棿"--> - <!-- show-tooltip-when-overflow--> - <!-- sortable="custom"--> - <!-- width="160"--> - <!-- />--> - <el-table-column - label="鎿嶄綔" - width="120" - fixed="right" - > - <template slot-scope="{row}"> - <div class="operationClass"> - <el-tooltip class="item" effect="dark" content="棰勮" placement="top"> - <i - class="el-icon-view" - :style="{color:$store.state.settings.theme}" - style="margin-right:15px;cursor: pointer;" - @click="edit('edit',row)" - /> - </el-tooltip> - <el-tooltip v-del-tab-index class="item" effect="dark" content="鍒犻櫎" placement="top"> - <i :style="{color:$store.state.settings.theme}" class="el-icon-delete" style="margin-right:15px;" @click="del(row)" /> - </el-tooltip> - <el-tooltip v-del-tab-index class="item" effect="dark" content="澶嶅埗" placement="top"> - <i :style="{color:$store.state.settings.theme}" class="el-icon-document-copy" style="cursor: pointer;color:#42b983" @click="copy('copy',row)" /> - </el-tooltip> - </div> - </template> - </el-table-column> - </el-table> - </div> - <!--鍒嗛〉--> - <pagination - :total="total" - :page.sync="form.page" - :limit.sync="form.rows" - align="right" - layout="total,prev, pager, next,sizes" - popper-class="select_bottom" - @pagination="getRouteSearch" - /> - </div> - - <el-dialog - v-el-drag-dialog - :title="operation==='add'?'鏂板':(operation==='edit'?'棰勮':'澶嶅埗')" - :visible.sync="dialogVisible" - width="1000px" - :close-on-click-modal="false" - :top="isIpad?'5vh':'15vh'" - @closed="handleClose" - @close="handleClose" - > - <el-form ref="dialogForm" style="height: 500px" :rules="dialogFormRules" :model="dialogForm" label-width="110px"> - <div style="display: flex"> - <el-form-item label="宸ヨ壓璺嚎缂栫爜" prop="code" style="margin-right: 20px"> - <el-input v-model="dialogForm.code" :disabled="operation==='edit'" style="width: 220px" /> - </el-form-item> - <el-form-item label="宸ヨ壓鍚嶇О" prop="name"> - <el-input v-model="dialogForm.name" :disabled="operation==='edit'" style="width: 220px" /> - </el-form-item> - </div> - <div style="display: flex"> - <el-form-item prop="enable" label="浣跨敤鐘舵��" style="margin-right: 20px"> - <el-select - v-model="dialogForm.enable" - filterable - :disabled="operation==='edit'" - :popper-append-to-body="false" - style="width: 220px" - placeholder="璇烽�夋嫨" - > - <el-option - v-for="item in isEnableArr" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - <el-form-item label="宸ヨ壓鎻忚堪" prop="description"> - <el-input - v-model="dialogForm.description" - :disabled="operation==='edit'" - type="textarea" - style="width: 220px" - /> - </el-form-item> - </div> - <el-form-item label="宸ヨ壓璁剧疆" prop="Data" style="margin-top: 30px"> - <div class="settingDiv"> - <!-- 瀹炵幇宸ヨ壓璁剧疆鍔ㄦ�佹坊鍔�--> - <div v-for="(tag,index) in dynamicTags" :key="tag.seq" style="display: flex;align-items: center"> - <div style="display: flex;align-items: center;position: relative;"> - <div - class="orderNumber" - :style="{ - backgroundColor:index===0?'#f8f8fa':'#409EFF', - color:index===0?'#c6bbc4':'#FFFFFF', - border:index===0?'1px solid #c6bbc4':'1px solid #409EFF', - zIndex:tag.label===selectedName?0:2 - }" - > - {{ index + 1 }} - </div> - - <!-- <el-tooltip--> - <!-- class="item"--> - <!-- effect="dark"--> - <!-- :content="tag.stepname"--> - <!-- placement="top"--> - <!-- >--> - <!-- @close="handleTagClose(tag.stepname)"--> - <!-- :closable="index!==0"--> - - <el-tag - v-if="tag.stepname!==selectedName" - :disable-transitions="false" - class="elTag" - :effect="tag.effect" - @click="elTagClick(tag)" - > - {{ tag.stepname }} - <i - v-if="tag.editDisabled&&operation!=='edit'" - class="el-icon-edit" - @click="tagEdit(tag)" - /> - </el-tag> - <!-- </el-tooltip>--> - <!-- {{ tag.editDisabled }}--> - <!-- left:tag.stepname===selectedName?'191px':'141px',--> - <i - v-if="index!==0&&tag.editDisabled&&operation!=='edit'" - :style="{ - top:tag.stepname===selectedName?'-2px':'-8px', - }" - class="el-icon-close" - @click="handleTagClose(tag)" - /> - <el-autocomplete - v-if="tag.stepname===selectedName" - :ref="'saveTagInput'+tag.seq" - v-model="autocompleteValue" - class="input-new-tag" - size="small" - :fetch-suggestions="querySearch" - style="margin-left: 0;width: 150px;transform: translate(1)" - autofocus - :debounce="300" - :popper-append-to-body="false" - popper-class="autocompleteClass" - @select="val=>handleSelect(val,tag)" - @keyup.enter.native="handleInputConfirm(tag)" - /> - <!-- @keyup.enter.native="handleInputConfirm(tag)"--> - - <!-- @blur="handleBlur2"--> - <div - v-if="index!==dynamicTags.length-1" - style="width: 40px;height: 1px;border: 1px solid #42b983" - /> - </div> - </div> - - <el-button - v-if="operation!=='edit'" - v-waves - type="success" - :disabled="addDisabled" - class="tagSuccess" - size="small" - icon="el-icon-plus" - @click="showInput" - /> - - </div> - </el-form-item> - </el-form> - <span slot="footer" class="dialog-footer"> - <div class="footerButton"> - <el-button v-if="operation==='edit'" v-waves @click="dialogVisibleCancel">杩� 鍥�</el-button> - <el-button v-if="operation!=='edit'" v-waves @click="dialogVisibleCancel">鍙� 娑�</el-button> - <el-button - v-if="operation!=='edit'" - v-waves - type="primary" - :loading="$store.state.app.buttonIsDisabled" - :disabled="$store.state.app.buttonIsDisabled" - @click="dialogVisibleConfirm" - >纭� 瀹�</el-button> - </div> - </span> - </el-dialog> - </div> -</template> - -<script> -import Pagination from '@/components/Pagination' -import { AddUpdateRoute, DeleteRoute, RouteSearch, StepSelect, ViewRoute } from '@/api/basicSettings' -import { validateCode } from '@/utils/global' -import elDragDialog from '@/directive/el-drag-dialog' -import waves from '@/directive/waves' -import TableColumnSettings from '@/components/TableColumnSettings' - -export default { - name: 'ProcessRoute', - components: { - Pagination, TableColumnSettings - }, - directives: { elDragDialog, waves }, - data() { - return { - isIpad: false, - mainHeight: 0, - tableHeight: 0, - form: { - routecode: '', // 宸ヨ壓璺嚎缂栫爜 - routename: '', // 宸ヨ壓璺嚎鍚嶇О - description: '', // 宸ヨ壓璺嚎鎻忚堪 - createuser: '', // 鍒涘缓浜哄憳 - prop: 'lm_date', // 鎺掑簭瀛楁 - order: 'desc', // 鎺掑簭瀛楁 - page: 1, // 绗嚑椤� - rows: 20 // 姣忛〉澶氬皯鏉� - }, - isEnableArr: [ - { label: '鏄�', value: 'Y' }, - { label: '鍚�', value: 'N' } - ], - total: 10, - tableData: [], - tableColumnSettingsArray: [ - { minWidth: 50, width: false, prop: 'id', label: 'id', id: 1, show: false, fixed: false, sortable: false }, // 闅愯棌鍒� show: false闅愯棌锛宼rue鏄剧ず - { minWidth: 25, width: 50, prop: 'rowNum', label: '搴忓彿', id: 2, show: true, fixed: 'left', sortable: false }, // custom - { - minWidth: 110, - width: false, - prop: 'code', - label: '缂栫爜', - id: 3, - show: true, - fixed: false, - sortable: true - }, - { - minWidth: 110, - width: false, - prop: 'name', - label: '鍚嶇О', - id: 4, - show: true, - fixed: false, - sortable: true - }, - { - minWidth: 330, - width: false, - prop: 'description', - label: '宸ヨ壓璺嚎鎻忚堪', - id: 5, - show: true, - fixed: false, - sortable: true - }, - { - minWidth: 110, - width: false, - prop: 'enable', - label: '浣跨敤鐘舵��', - id: 6, - show: true, - fixed: false, - sortable: true - }, - { - minWidth: 110, - width: false, - prop: 'lm_user', - label: '鍒涘缓浜哄憳', - id: 7, - show: true, - fixed: false, - sortable: true - }, - { - minWidth: 160, - width: false, - prop: 'lm_date', - label: '鍒涘缓鏃堕棿', - id: 8, - show: true, - fixed: false, - sortable: true - } - ], - tableTimeStampKey: new Date().getTime(), // 琛ㄦ牸key - dialogVisible: false, - dialogForm: { - id: '', - code: '', - name: '', - enable: 'Y', - description: '', - Data: [] - }, - dynamicTags: [// 宸ヨ壓璁剧疆鏁扮粍 - { editDisabled: true, stepcode: '', seq: 1, stepname: ' ', effect: 'light' } - // { editDisabled: true, stepcode: 'Step02', seq: 2, stepname: '濂�', effect: 'light' }, - // { editDisabled: true, stepcode: 'Step03', seq: 3, stepname: '澶�', effect: 'light' } - ], - clickSelected: '', // 榧犳爣鐐瑰嚮閫変腑鐨勫�� - selectedName: '', // 閫変腑鐨勫悕绉� - autocompleteValue: '', // 鍙悳绱㈣緭鍏ユ涓殑鍊� - routeArr: [], // 宸ヨ壓璁剧疆涓嬫媺鎵�鏈夊�� - routeSelectedArr: [], // 宸ヨ壓璁剧疆涓嬫媺宸查�夌殑鍊� - addDisabled: true, // 娣诲姞鎸夐挳鏄惁鍙偣鍑� - // editDisabled: true, // 淇敼鎸夐挳鏄惁鍙偣鍑� - mouseFocusPosition: 0, // 榧犳爣鑱氱劍鐨勪綅缃� - operation: '', - dialogFormRules: { - code: [ - { required: true, validator: validateCode, trigger: ['blur', 'change'] } - ], - name: [ - { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: ['blur', 'change'] } - ], - enable: [ - { required: true, message: '璇烽�夋嫨浣跨敤鐘舵��', trigger: ['blur', 'change'] } - ] - // Data: [ - // { required: true, message: '璇疯缃伐鑹�', trigger: ['blur', 'change'] } - // ] - } - - } - }, - activated() { window.addEventListener('resize', this.getHeight) this.getHeight() }, created() { - this.getRouteSearch() - }, - mounted() { - window.addEventListener('resize', this.getHeight) - this.getHeight() - }, - methods: { - tableColumnUpdate(val, isCopyTrue) { - if (isCopyTrue) { - this.tableColumnSettingsArray = val - } - this.tableTimeStampKey = new Date().getTime() - this.$refs.tableDataRef.doLayout() - }, - // 杩滅▼鎼滅储 - querySearch(queryString, cb) { - const routeArr = this.routeArr - routeArr.forEach(item => { - item.value = item.stepname - }) - const results = queryString ? routeArr.filter(this.createFilter(queryString)) : routeArr - // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹� - cb(results) - }, - // 杩囨护 - createFilter(queryString) { - return (res) => { - return (res.value.toLowerCase().indexOf(queryString.toLowerCase()) !== -1) - } - }, - // 宸ヨ壓璁剧疆 涓嬫媺鑾峰彇鎵�鏈� - async getStepSelectArr() { - const { data: res } = await StepSelect() - this.routeArr = res - }, - // 澶勭悊涓嬫媺閫夋嫨 - handleSelect(item, tag) { - this.autocompleteValue = item.value - this.$nextTick(_ => { - this.$refs['saveTagInput' + this.mouseFocusPosition][0].focus() - this.handleInputConfirm(tag) - }) - }, - // 杈撳叆妗嗙‘璁や簨浠� - handleInputConfirm(tag) { - // 1.閫夋嫨鍐呭涓嶈兘涓虹┖ - if (this.autocompleteValue.trim().length < 1) { - return this.$message.info('閫夋嫨鍐呭涓嶈兘涓虹┖锛�') - } - // 2.杈撳叆妗嗗唴瀹逛笌涓嬫媺閫夐」鍐呭涓嶅尮閰� - let flag = false - this.routeArr.forEach(item => { - if (item.stepname === this.autocompleteValue) { - flag = true - } - }) - if (!flag) { - return this.$message.info('杈撳叆妗嗗唴瀹逛笌涓嬫媺閫夐」鍐呭涓嶅尮閰嶏紒') - } - - // 3.杈撳叆妗嗗唴瀹逛笌宸查�夊唴瀹圭浉鍚屾椂涓嶈兘淇濆瓨 - let flag2 = false - this.dynamicTags.forEach(item => { - if (item.stepname === this.autocompleteValue.trim()) { - flag2 = true - } - }) - if (tag.stepname === this.autocompleteValue.trim()) { - flag2 = false - } - if (flag2) { - return this.$message.info('姝ゅ伐搴忓凡閫夛紝璇烽�夋嫨鍏跺畠宸ュ簭锛�') - } - - this.routeArr.forEach((item, index) => { - if (this.autocompleteValue.trim() === item.stepname) { - this.routeSelectedArr.push({ - stepcode: item.stepcode, - stepname: item.stepname, - value: item.value - }) - - this.routeArr.splice(index, 1) - } - }) - - // 灏嗗�兼浛鎹㈠埌鍘焧ag浣嶇疆涓� - this.dynamicTags.forEach((item, index) => { - if ((index + 1) === tag.seq) { - item.stepname = this.autocompleteValue - item.effect = 'dark' - } - item.editDisabled = true - }) - this.clickSelected = this.dynamicTags.findIndex(i => i.effect === 'dark') + 1 - - this.addDisabled = false - this.editDisabled = true - this.selectedName = '' - }, - // tag鐐瑰嚮淇敼鎸夐挳 - tagEdit(tag) { - this.autocompleteValue = '' - this.dynamicTags.forEach(item => { - item.stepname = item.stepname.trim() - item.editDisabled = false - if (item.seq !== tag.seq) { - item.effect = 'light' - } else { - item.effect = 'dark' - } - }) - - if (tag.stepname !== '') { - const routeSelectedArr = this.routeSelectedArr.find(item => item.stepname === tag.stepname) - - this.routeArr.push( - { - stepcode: routeSelectedArr.stepcode, - stepname: routeSelectedArr.stepname, - value: routeSelectedArr.value - } - ) - } - - this.addDisabled = true - this.selectedName = tag.stepname - this.autocompleteValue = tag.stepname - this.$nextTick(_ => { - this.$refs['saveTagInput' + tag.seq][0].focus() - }) - this.mouseFocusPosition = tag.seq - }, - // tag鐐瑰嚮浜嬩欢 - elTagClick(tag) { - if (this.dynamicTags.every(i => i.editDisabled)) { - this.clickSelected = tag.seq - if (tag.effect === 'dark') { - - } else { - this.dynamicTags.forEach(item => { - item.effect = 'light' - }) - if (tag.effect === 'light') { - tag.effect = 'dark' - } else if (tag.effect === 'dark') { - tag.effect = 'light' - } - } - } - }, - // 澶勭悊tag鍏抽棴浜嬩欢 - handleTagClose(tag) { - // 褰撻�変腑鐨勬楠よ鍒犻櫎鏃� - if (tag.effect === 'dark') { - this.clickSelected = this.dynamicTags.length - 1 - } - this.dynamicTags.forEach((item, index) => { - if (item.seq === tag.seq) { - this.dynamicTags.splice(index, 1) - } - }) - - const routeSelectedArr = this.routeSelectedArr.find(item => item.stepname === tag.stepname) - - if (routeSelectedArr !== undefined) { - this.routeArr.push( - { - stepcode: routeSelectedArr.stepcode, - stepname: routeSelectedArr.stepname, - value: routeSelectedArr.value - } - ) - } - this.routeArr = this.routeArr.filter((currentValue, currentIndex, selfArr) => { - return selfArr.findIndex(item => item.stepcode === currentValue.stepcode) === currentIndex - }) - - // 閲嶆柊鎺掑簭 - this.dynamicTags.forEach((item, index) => { - item.editDisabled = true - item.seq = index + 1 - item.stepcode = '' - item.effect = index === this.dynamicTags.length - 1 ? 'dark' : 'light' - }) - this.addDisabled = false - }, - // tag娣诲姞鎸夐挳 - showInput() { - const seq = this.dynamicTags.findIndex(i => i.effect === 'dark') + 2 - - // 鍏堝皢姣忎釜鐨則ag鏍囩棰滆壊鏀逛负娴呰壊 - this.dynamicTags.forEach(i => { - i.effect = 'light' - }) - - this.autocompleteValue = '' - this.addDisabled = true - this.editDisabled = false - - this.dynamicTags.splice(this.clickSelected, 0, { editDisabled: true, seq: seq, stepname: '', effect: 'dark' }) - this.dynamicTags.forEach((item, index) => { - item.seq = index + 1 - item.stepcode = '' - }) - this.$nextTick(_ => { - this.$refs['saveTagInput' + seq][0].focus() - }) - - this.mouseFocusPosition = seq - - this.dynamicTags.forEach((item, index) => { - item.editDisabled = seq === index + 1 - }) - }, - - // 鑾峰彇宸ヨ壓璺嚎鍒楄〃娓呭崟 - async getRouteSearch() { - const res = await RouteSearch(this.form) - this.tableData = res.data - this.total = res.count - }, - // 鎺掑簭鏀瑰彉鏃� - sortChange({ column, prop, order }) { - if (order === 'descending') { - order = 'desc' - } else if (order === 'ascending') { - order = 'asc' - } else { - order = 'desc' - } - this.form.order = order - this.form.prop = prop - this.getRouteSearch() - }, - // 鏌ヨ - search() { - this.getRouteSearch() - }, - upload() { - - }, - // 閲嶇疆 - reset() { - this.form.routecode = '' - this.form.routename = '' - this.form.description = '' - this.form.createuser = '' - this.getRouteSearch() - }, - - // 鏂板鎸夐挳 - add(operation) { - this.operation = operation - this.dialogVisible = true - this.getStepSelectArr() - }, - // 宸ヨ壓璺嚎棰勮 - async edit(operation, row) { - this.operation = operation - this.dialogVisible = true - - const { data: res } = await ViewRoute({ routecode: row.code }) - - this.dynamicTags = [] - this.$nextTick(() => { - this.dialogForm.code = res[0].code - this.dialogForm.name = res[0].name - this.dialogForm.enable = res[0].enable - this.dialogForm.description = res[0].description - // this.dialogForm.Data = row.description - res[0].Data.forEach(item => { - this.dynamicTags.push( - { seq: item.seq, stepname: item.stepname, stepcode: item.stepcode, editDisabled: true, effect: 'light' } - ) - }) - }) - }, - // 鍒犻櫎鎸夐挳 - async del(row) { - this.$confirm('鏄惁纭鍒犻櫎?', '鎻愮ず', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning' - }).then(() => { - DeleteRoute({ routecode: row.code }).then(res => { - if (res.code === '200') { - this.$message.success('鍒犻櫎鎴愬姛!') - if (this.form.page > 1 && this.tableData.length === 1) { - this.form.page-- - } - this.getRouteSearch() - } - }) - }).catch(() => { - this.$message.info('宸插彇娑堝垹闄�') - }) - }, - // 澶嶅埗鎸夐挳 - async copy(operation, row) { - this.operation = operation - this.dialogVisible = true - - await this.getStepSelectArr() - const { data: res } = await ViewRoute({ routecode: row.code }) - // 寰呮敼 - this.dynamicTags = [] - this.routeSelectedArr = [] - this.$nextTick(() => { - this.dialogForm.code = res[0].code - this.dialogForm.name = res[0].name - this.dialogForm.enable = res[0].enable - this.dialogForm.description = res[0].description - res[0].Data.forEach((item, index) => { - this.dynamicTags.push( - { seq: item.seq, stepname: item.stepname, stepcode: item.stepcode, editDisabled: true, effect: index === res[0].Data.length - 1 ? 'dark' : 'light' } - ) - this.routeSelectedArr.push({ - stepcode: item.stepcode, - stepname: item.stepname, - value: item.stepname - }) - this.routeArr = this.routeArr.filter(i => i.stepcode !== item.stepcode) - }) - - this.addDisabled = false - this.clickSelected = this.dynamicTags.length - }) - }, - // 瀵硅瘽妗嗗叧闂簨浠� - handleClose() { - this.dialogForm.code = '' - this.dialogForm.name = '' - this.dialogForm.enable = 'Y' - this.dialogForm.description = '' - this.dialogForm.Data = [] - - this.dynamicTags = [ - { editDisabled: true, stepcode: '', seq: 1, stepname: ' ', effect: 'light' } - ] - this.addDisabled = true - this.routeSelectedArr = [] - this.$refs.dialogForm.clearValidate() - }, - // 瀵硅瘽妗嗗彇娑� - dialogVisibleCancel() { - this.dialogVisible = false - }, - // 瀵硅瘽妗嗙‘璁� - dialogVisibleConfirm() { - if (this.dynamicTags[0].stepname.trim() === '') { - return this.$message.info('宸ヨ壓璁剧疆绗竴椤逛笉鑳戒负绌猴紒') - } - const Data = [] - this.dynamicTags.forEach(item => { - Data.push({ - seq: item.seq, - stepcode: this.routeSelectedArr.find(it => it.stepname === item.stepname).stepcode, - stepname: item.stepname - }) - }) - - Data.forEach(item => { - if (item.stepname === this.routeSelectedArr.find(it => it.stepname === item.stepname).stepname) { - item.stepcode = this.routeSelectedArr.find(it => it.stepname === item.stepname).stepcode - } - }) - - this.$refs.dialogForm.validate(valid => { - if (valid) { - this.$store.state.app.buttonIsDisabled = true - const data = { - code: this.dialogForm.code, - name: this.dialogForm.name, - enable: this.dialogForm.enable, - description: this.dialogForm.description, - Data: Data - } - - AddUpdateRoute(this.dialogForm.id, this.operation === 'edit' ? 'Update' : 'Add', data).then(res => { - if (res.code === '200') { - this.dialogVisible = false - this.$message.success(this.operation === 'add' ? '娣诲姞鎴愬姛锛�' : '澶嶅埗鎴愬姛锛�') - this.getRouteSearch() - this.$store.state.app.buttonIsDisabled = false - } else { - this.$message.error(this.operation === 'add' ? '娣诲姞澶辫触锛�' : '澶嶅埗澶辫触锛�') - } - }) - } - }) - }, - // 鑾峰彇椤甸潰楂樺害 - getHeight() { - this.$nextTick(() => { - this.mainHeight = window.innerHeight - 85 - this.tableHeight = this.mainHeight - 195 - if (window.innerHeight < 769) { - this.tableHeight = this.tableHeight - 40 - } - this.isIpad = window.innerHeight < 769 && window.innerWidth < 1367 - this.$refs.tableDataRef.doLayout() - }) - }, - tableRowClassName({ row, rowIndex }) { - return 'custom-row' - } - } -} -</script> - -<style lang="scss" scoped> -$main_color: #42b983; - -/* -瀹炵幇宸ヨ壓璁剧疆鍔ㄦ�佹坊鍔犳牱寮� -*/ - -.orderNumber { - margin-bottom: 31px; - position: absolute; - margin-left: -7px; - z-index: 2; - width: 16px; - height: 16px !important; - font-size: 12px; - text-align: center; - line-height: 15px; - color: #FFFFFF; - background-color: #409EFF; - border-radius: 50%; -} - -.el-icon-edit { - width: 16px; - height: 16px; - border-radius: 50%; - padding: 3px 0 0 3px; - margin-left: 5px; - cursor: pointer; - position: absolute; - right: 3px; - bottom: 8px; -} - -.el-icon-edit:hover { - background-color: #99a9bf; - color: #FFFFFF; -} - -.el-icon-close { - position: absolute; - top: -8px; - z-index: 2; - left: 141px; - cursor: pointer; - color: #FFFFFF; - border-radius: 50%; - background-color: #ff7474; - padding: 1px 0 0 1px; -} - -//.el-icon-close:hover { -// background-color: #99a9bf; -//} - -.el-tag--dark { - background-color: $main_color; - border-color: $main_color; -} - -.tagSuccess { - margin-left: 20px; - width: 100px; - height: 32px; - display: flex; - justify-content: center; - color: $main_color; -} - -::v-deep .el-button--success { - width: 40px !important; - background-color: #ecf5ff; - border-radius: 0; - color: $main_color; -} - -::v-deep .el-button--success:disabled { - background-color: #eeeeee; - color: $main_color; -} - -::v-deep .el-tag { - //height: 30px; - border-radius: 0; - border: 1px solid $main_color; -} - -::v-deep .el-input--small .el-input__inner { - border-radius: 0; -} - -.settingDiv { - display: flex; - width: 100%; - padding-left: 7px; - height: 56px; - overflow-x: scroll; - overflow-y: hidden; - align-items: center; - background: aliceblue; -} - -.elTag { - margin-left: 0; - width: 150px; - position: relative; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.autocompleteClass { - .el-autocomplete-suggestion li { - //color: red; - } -} -</style> - -<style> -.el-table .custom-row { - background: #f8f8fa; -} -</style> +<template> + <div> + <div class="body" :style="{height:mainHeight+'px'}"> + + <div class="bodyTopButtonGroup"> + <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">鏂板</el-button> + <!-- <el-button v-waves type="primary" icon="el-icon-upload2" @click="upload">瀵煎叆</el-button>--> + </div> + + <div class="bodyTopFormGroup"> + <el-form + ref="form" + :model="form" + label-width="100px" + inline + style="display: flex;" + > + <div class="elForm"> + <el-form-item label="宸ヨ壓璺嚎缂栫爜" style=" display: flex;"> + <el-input v-model="form.routecode" placeholder="璇疯緭鍏�" style="width: 200px" /> + </el-form-item> + <el-form-item label="宸ヨ壓鍚嶇О" style=" display: flex;"> + <el-input v-model="form.routename" placeholder="璇疯緭鍏�" style="width: 200px" /> + </el-form-item> + <el-form-item label="宸ヨ壓鎻忚堪" style=" display: flex;"> + <el-input v-model="form.description" placeholder="璇疯緭鍏�" style="width: 200px" /> + </el-form-item> + <el-form-item label="鍒涘缓浜哄憳" style=" display: flex;"> + <el-input v-model="form.createuser" style="width: 200px" placeholder="璇疯緭鍏�" /> + </el-form-item> + </div> + <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"> + <el-button v-waves type="primary" icon="el-icon-search" @click="search">鏌ヨ</el-button> + <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">閲嶇疆</el-button> + </div> + </el-form> + <div + class="bodyTopFormExpand" + /> + </div> + + <div class="elTableDiv"> + <!-- <TableColumnSettings--> + <!-- :list1="tableColumnSettingsArray"--> + <!-- @tableColumnUpdate="tableColumnUpdate"--> + <!-- />--> + <el-table + ref="tableDataRef" + :key="tableTimeStampKey" + class="tableFixed" + :data="tableData" + :height="tableHeight" + border + :row-class-name="tableRowClassName" + :style="{width: 100+'%',height:tableHeight+'px',}" + highlight-current-row + :header-cell-style="this.$headerCellStyle" + :cell-style="this.$cellStyle" + @sort-change="sortChange" + > + + <el-table-column + v-for="item in tableColumnSettingsArray" + v-if="item.show" + :key="item.id" + :sortable="item.sortable" + :prop="item.prop" + :min-width="item.minWidth" + :label="item.label" + :width="item.width" + show-tooltip-when-overflow + :fixed="item.fixed?(item.fixed==='left'?'left':'right'):false" + > + <template slot-scope="{row}"> + <div v-if="!row[item.prop]">/</div> + <div v-else-if="item.prop==='enable'"> + <div v-if="row[item.prop]==='Y'"> + <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" /> + 鏄� + </div> + <div v-if="row[item.prop]==='N'"> + <i class="el-icon-info" style="margin-right: 2px" /> + 鍚� + </div> + </div> + <div v-else>{{ row[item.prop] }}</div> + </template> + </el-table-column> + + <!-- <el-table-column--> + <!-- type="selection"--> + <!-- width="50"--> + <!-- />--> + <!-- <el-table-column--> + <!-- prop="RowNum"--> + <!-- width="50"--> + <!-- label="搴忓彿"--> + <!-- fixed--> + <!-- />--> + <!-- <el-table-column--> + <!-- prop="code"--> + <!-- label="缂栫爜"--> + <!-- show-tooltip-when-overflow--> + <!-- sortable="custom"--> + <!-- />--> + <!-- <el-table-column--> + <!-- prop="name"--> + <!-- show-tooltip-when-overflow--> + <!-- label="鍚嶇О"--> + <!-- sortable="custom"--> + <!-- />--> + <!-- <el-table-column--> + <!-- prop="description"--> + <!-- label="宸ヨ壓璺嚎鎻忚堪"--> + <!-- sortable="custom"--> + <!-- show-tooltip-when-overflow--> + <!-- >--> + <!-- <template slot-scope="{row}">--> + <!-- <div v-if="row.description">{{ row.description }}</div>--> + <!-- <div v-else>/</div>--> + <!-- </template>--> + <!-- </el-table-column>--> + <!-- <el-table-column--> + <!-- prop="enable"--> + <!-- show-tooltip-when-overflow--> + <!-- label="浣跨敤鐘舵��"--> + <!-- sortable="custom"--> + <!-- >--> + <!-- <template slot-scope="{row}">--> + <!-- <div v-if="row.enable==='Y'">--> + <!-- <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />--> + <!-- 鏄�--> + <!-- </div>--> + <!-- <div v-if="row.enable==='N'">--> + <!-- <i class="el-icon-info" style="margin-right: 2px" />--> + <!-- 鍚�--> + <!-- </div>--> + <!-- </template>--> + <!-- </el-table-column>--> + <!-- <el-table-column--> + <!-- prop="lm_user"--> + <!-- show-tooltip-when-overflow--> + <!-- label="鍒涘缓浜哄憳"--> + <!-- sortable="custom"--> + <!-- />--> + <!-- <el-table-column--> + <!-- prop="lm_date"--> + <!-- label="鍒涘缓鏃堕棿"--> + <!-- show-tooltip-when-overflow--> + <!-- sortable="custom"--> + <!-- width="160"--> + <!-- />--> + <el-table-column + label="鎿嶄綔" + width="120" + fixed="right" + > + <template slot-scope="{row}"> + <div class="operationClass"> + <el-tooltip class="item" effect="dark" content="棰勮" placement="top"> + <i + class="el-icon-view" + :style="{color:$store.state.settings.theme}" + style="margin-right:15px;cursor: pointer;" + @click="edit('edit',row)" + /> + </el-tooltip> + <el-tooltip v-del-tab-index class="item" effect="dark" content="鍒犻櫎" placement="top"> + <i :style="{color:$store.state.settings.theme}" class="el-icon-delete" style="margin-right:15px;" @click="del(row)" /> + </el-tooltip> + <el-tooltip v-del-tab-index class="item" effect="dark" content="澶嶅埗" placement="top"> + <i :style="{color:$store.state.settings.theme}" class="el-icon-document-copy" style="cursor: pointer;color:#42b983" @click="copy('copy',row)" /> + </el-tooltip> + </div> + </template> + </el-table-column> + </el-table> + </div> + <!--鍒嗛〉--> + <pagination + :total="total" + :page.sync="form.page" + :limit.sync="form.rows" + align="right" + layout="total,prev, pager, next,sizes" + popper-class="select_bottom" + @pagination="getRouteSearch" + /> + </div> + + <el-dialog + v-el-drag-dialog + :title="operation==='add'?'鏂板':(operation==='edit'?'棰勮':'澶嶅埗')" + :visible.sync="dialogVisible" + width="1000px" + :close-on-click-modal="false" + :top="isIpad?'5vh':'15vh'" + @closed="handleClose" + @close="handleClose" + > + <el-form ref="dialogForm" style="height: 500px" :rules="dialogFormRules" :model="dialogForm" label-width="110px"> + <div style="display: flex"> + <el-form-item label="宸ヨ壓璺嚎缂栫爜" prop="code" style="margin-right: 20px"> + <el-input v-model="dialogForm.code" :disabled="operation==='edit'" style="width: 220px" /> + </el-form-item> + <el-form-item label="宸ヨ壓鍚嶇О" prop="name"> + <el-input v-model="dialogForm.name" :disabled="operation==='edit'" style="width: 220px" /> + </el-form-item> + </div> + <div style="display: flex"> + <el-form-item prop="enable" label="浣跨敤鐘舵��" style="margin-right: 20px"> + <el-select + v-model="dialogForm.enable" + filterable + :disabled="operation==='edit'" + :popper-append-to-body="false" + style="width: 220px" + placeholder="璇烽�夋嫨" + > + <el-option + v-for="item in isEnableArr" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + <el-form-item label="宸ヨ壓鎻忚堪" prop="description"> + <el-input + v-model="dialogForm.description" + :disabled="operation==='edit'" + type="textarea" + style="width: 220px" + /> + </el-form-item> + </div> + <el-form-item label="宸ヨ壓璁剧疆" prop="Data" style="margin-top: 30px"> + <div class="settingDiv"> + <!-- 瀹炵幇宸ヨ壓璁剧疆鍔ㄦ�佹坊鍔�--> + <div v-for="(tag,index) in dynamicTags" :key="tag.seq" style="display: flex;align-items: center"> + <div style="display: flex;align-items: center;position: relative;"> + <div + class="orderNumber" + :style="{ + backgroundColor:index===0?'#f8f8fa':'#409EFF', + color:index===0?'#c6bbc4':'#FFFFFF', + border:index===0?'1px solid #c6bbc4':'1px solid #409EFF', + zIndex:tag.label===selectedName?0:2 + }" + > + {{ index + 1 }} + </div> + + <!-- <el-tooltip--> + <!-- class="item"--> + <!-- effect="dark"--> + <!-- :content="tag.stepname"--> + <!-- placement="top"--> + <!-- >--> + <!-- @close="handleTagClose(tag.stepname)"--> + <!-- :closable="index!==0"--> + + <el-tag + v-if="tag.stepname!==selectedName" + :disable-transitions="false" + class="elTag" + :effect="tag.effect" + @click="elTagClick(tag)" + > + {{ tag.stepname }} + <i + v-if="tag.editDisabled&&operation!=='edit'" + class="el-icon-edit" + @click="tagEdit(tag)" + /> + </el-tag> + <!-- </el-tooltip>--> + <!-- {{ tag.editDisabled }}--> + <!-- left:tag.stepname===selectedName?'191px':'141px',--> + <i + v-if="index!==0&&tag.editDisabled&&operation!=='edit'" + :style="{ + top:tag.stepname===selectedName?'-2px':'-8px', + }" + class="el-icon-close" + @click="handleTagClose(tag)" + /> + <el-autocomplete + v-if="tag.stepname===selectedName" + :ref="'saveTagInput'+tag.seq" + v-model="autocompleteValue" + class="input-new-tag" + size="small" + :fetch-suggestions="querySearch" + style="margin-left: 0;width: 150px;transform: translate(1)" + autofocus + :debounce="300" + :popper-append-to-body="false" + popper-class="autocompleteClass" + @select="val=>handleSelect(val,tag)" + @keyup.enter.native="handleInputConfirm(tag)" + /> + <!-- @keyup.enter.native="handleInputConfirm(tag)"--> + + <!-- @blur="handleBlur2"--> + <div + v-if="index!==dynamicTags.length-1" + style="width: 40px;height: 1px;border: 1px solid #42b983" + /> + </div> + </div> + + <el-button + v-if="operation!=='edit'" + v-waves + type="success" + :disabled="addDisabled" + class="tagSuccess" + size="small" + icon="el-icon-plus" + @click="showInput" + /> + + </div> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <div class="footerButton"> + <el-button v-if="operation==='edit'" v-waves @click="dialogVisibleCancel">杩� 鍥�</el-button> + <el-button v-if="operation!=='edit'" v-waves @click="dialogVisibleCancel">鍙� 娑�</el-button> + <el-button + v-if="operation!=='edit'" + v-waves + type="primary" + :loading="$store.state.app.buttonIsDisabled" + :disabled="$store.state.app.buttonIsDisabled" + @click="dialogVisibleConfirm" + >纭� 瀹�</el-button> + </div> + </span> + </el-dialog> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' +import { AddUpdateRoute, DeleteRoute, RouteSearch, StepSelect, ViewRoute } from '@/api/basicSettings' +import { validateCode } from '@/utils/global' +import elDragDialog from '@/directive/el-drag-dialog' +import waves from '@/directive/waves' +import TableColumnSettings from '@/components/TableColumnSettings' + +export default { + name: 'ProcessRoute', + components: { + Pagination, TableColumnSettings + }, + directives: { elDragDialog, waves }, + data() { + return { + isIpad: false, + mainHeight: 0, + tableHeight: 0, + form: { + routecode: '', // 宸ヨ壓璺嚎缂栫爜 + routename: '', // 宸ヨ壓璺嚎鍚嶇О + description: '', // 宸ヨ壓璺嚎鎻忚堪 + createuser: '', // 鍒涘缓浜哄憳 + prop: 'lm_date', // 鎺掑簭瀛楁 + order: 'desc', // 鎺掑簭瀛楁 + page: 1, // 绗嚑椤� + rows: 20 // 姣忛〉澶氬皯鏉� + }, + isEnableArr: [ + { label: '鏄�', value: 'Y' }, + { label: '鍚�', value: 'N' } + ], + total: 10, + tableData: [], + tableColumnSettingsArray: [ + { minWidth: 50, width: false, prop: 'id', label: 'id', id: 1, show: false, fixed: false, sortable: false }, // 闅愯棌鍒� show: false闅愯棌锛宼rue鏄剧ず + { minWidth: 25, width: 50, prop: 'rowNum', label: '搴忓彿', id: 2, show: true, fixed: 'left', sortable: false }, // custom + { + minWidth: 110, + width: false, + prop: 'code', + label: '缂栫爜', + id: 3, + show: true, + fixed: false, + sortable: true + }, + { + minWidth: 110, + width: false, + prop: 'name', + label: '鍚嶇О', + id: 4, + show: true, + fixed: false, + sortable: true + }, + { + minWidth: 330, + width: false, + prop: 'description', + label: '宸ヨ壓璺嚎鎻忚堪', + id: 5, + show: true, + fixed: false, + sortable: true + }, + { + minWidth: 110, + width: false, + prop: 'enable', + label: '浣跨敤鐘舵��', + id: 6, + show: true, + fixed: false, + sortable: true + }, + { + minWidth: 110, + width: false, + prop: 'lm_user', + label: '鍒涘缓浜哄憳', + id: 7, + show: true, + fixed: false, + sortable: true + }, + { + minWidth: 160, + width: false, + prop: 'lm_date', + label: '鍒涘缓鏃堕棿', + id: 8, + show: true, + fixed: false, + sortable: true + } + ], + tableTimeStampKey: new Date().getTime(), // 琛ㄦ牸key + dialogVisible: false, + dialogForm: { + id: '', + code: '', + name: '', + enable: 'Y', + description: '', + Data: [] + }, + dynamicTags: [// 宸ヨ壓璁剧疆鏁扮粍 + { editDisabled: true, stepcode: '', seq: 1, stepname: ' ', effect: 'light' } + // { editDisabled: true, stepcode: 'Step02', seq: 2, stepname: '濂�', effect: 'light' }, + // { editDisabled: true, stepcode: 'Step03', seq: 3, stepname: '澶�', effect: 'light' } + ], + clickSelected: '', // 榧犳爣鐐瑰嚮閫変腑鐨勫�� + selectedName: '', // 閫変腑鐨勫悕绉� + autocompleteValue: '', // 鍙悳绱㈣緭鍏ユ涓殑鍊� + routeArr: [], // 宸ヨ壓璁剧疆涓嬫媺鎵�鏈夊�� + routeSelectedArr: [], // 宸ヨ壓璁剧疆涓嬫媺宸查�夌殑鍊� + addDisabled: true, // 娣诲姞鎸夐挳鏄惁鍙偣鍑� + // editDisabled: true, // 淇敼鎸夐挳鏄惁鍙偣鍑� + mouseFocusPosition: 0, // 榧犳爣鑱氱劍鐨勪綅缃� + operation: '', + dialogFormRules: { + code: [ + { required: true, validator: validateCode, trigger: ['blur', 'change'] } + ], + name: [ + { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: ['blur', 'change'] } + ], + enable: [ + { required: true, message: '璇烽�夋嫨浣跨敤鐘舵��', trigger: ['blur', 'change'] } + ] + // Data: [ + // { required: true, message: '璇疯缃伐鑹�', trigger: ['blur', 'change'] } + // ] + } + + } + }, + activated() { + window.addEventListener('resize', this.getHeight) + this.getHeight() + this.getRouteSearch() + }, + created() { + this.getRouteSearch() + }, + mounted() { + window.addEventListener('resize', this.getHeight) + this.getHeight() + }, + methods: { + tableColumnUpdate(val, isCopyTrue) { + if (isCopyTrue) { + this.tableColumnSettingsArray = val + } + this.tableTimeStampKey = new Date().getTime() + this.$refs.tableDataRef.doLayout() + }, + // 杩滅▼鎼滅储 + querySearch(queryString, cb) { + const routeArr = this.routeArr + routeArr.forEach(item => { + item.value = item.stepname + }) + const results = queryString ? routeArr.filter(this.createFilter(queryString)) : routeArr + // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹� + cb(results) + }, + // 杩囨护 + createFilter(queryString) { + return (res) => { + return (res.value.toLowerCase().indexOf(queryString.toLowerCase()) !== -1) + } + }, + // 宸ヨ壓璁剧疆 涓嬫媺鑾峰彇鎵�鏈� + async getStepSelectArr() { + const { data: res } = await StepSelect() + this.routeArr = res + }, + // 澶勭悊涓嬫媺閫夋嫨 + handleSelect(item, tag) { + this.autocompleteValue = item.value + this.$nextTick(_ => { + this.$refs['saveTagInput' + this.mouseFocusPosition][0].focus() + this.handleInputConfirm(tag) + }) + }, + // 杈撳叆妗嗙‘璁や簨浠� + handleInputConfirm(tag) { + // 1.閫夋嫨鍐呭涓嶈兘涓虹┖ + if (this.autocompleteValue.trim().length < 1) { + return this.$message.info('閫夋嫨鍐呭涓嶈兘涓虹┖锛�') + } + // 2.杈撳叆妗嗗唴瀹逛笌涓嬫媺閫夐」鍐呭涓嶅尮閰� + let flag = false + this.routeArr.forEach(item => { + if (item.stepname === this.autocompleteValue) { + flag = true + } + }) + if (!flag) { + return this.$message.info('杈撳叆妗嗗唴瀹逛笌涓嬫媺閫夐」鍐呭涓嶅尮閰嶏紒') + } + + // 3.杈撳叆妗嗗唴瀹逛笌宸查�夊唴瀹圭浉鍚屾椂涓嶈兘淇濆瓨 + let flag2 = false + this.dynamicTags.forEach(item => { + if (item.stepname === this.autocompleteValue.trim()) { + flag2 = true + } + }) + if (tag.stepname === this.autocompleteValue.trim()) { + flag2 = false + } + if (flag2) { + return this.$message.info('姝ゅ伐搴忓凡閫夛紝璇烽�夋嫨鍏跺畠宸ュ簭锛�') + } + + this.routeArr.forEach((item, index) => { + if (this.autocompleteValue.trim() === item.stepname) { + this.routeSelectedArr.push({ + stepcode: item.stepcode, + stepname: item.stepname, + value: item.value + }) + + this.routeArr.splice(index, 1) + } + }) + + // 灏嗗�兼浛鎹㈠埌鍘焧ag浣嶇疆涓� + this.dynamicTags.forEach((item, index) => { + if ((index + 1) === tag.seq) { + item.stepname = this.autocompleteValue + item.effect = 'dark' + } + item.editDisabled = true + }) + this.clickSelected = this.dynamicTags.findIndex(i => i.effect === 'dark') + 1 + + this.addDisabled = false + this.editDisabled = true + this.selectedName = '' + }, + // tag鐐瑰嚮淇敼鎸夐挳 + tagEdit(tag) { + this.autocompleteValue = '' + this.dynamicTags.forEach(item => { + item.stepname = item.stepname.trim() + item.editDisabled = false + if (item.seq !== tag.seq) { + item.effect = 'light' + } else { + item.effect = 'dark' + } + }) + + if (tag.stepname !== '') { + const routeSelectedArr = this.routeSelectedArr.find(item => item.stepname === tag.stepname) + + this.routeArr.push( + { + stepcode: routeSelectedArr.stepcode, + stepname: routeSelectedArr.stepname, + value: routeSelectedArr.value + } + ) + } + + this.addDisabled = true + this.selectedName = tag.stepname + this.autocompleteValue = tag.stepname + this.$nextTick(_ => { + this.$refs['saveTagInput' + tag.seq][0].focus() + }) + this.mouseFocusPosition = tag.seq + }, + // tag鐐瑰嚮浜嬩欢 + elTagClick(tag) { + if (this.dynamicTags.every(i => i.editDisabled)) { + this.clickSelected = tag.seq + if (tag.effect === 'dark') { + + } else { + this.dynamicTags.forEach(item => { + item.effect = 'light' + }) + if (tag.effect === 'light') { + tag.effect = 'dark' + } else if (tag.effect === 'dark') { + tag.effect = 'light' + } + } + } + }, + // 澶勭悊tag鍏抽棴浜嬩欢 + handleTagClose(tag) { + // 褰撻�変腑鐨勬楠よ鍒犻櫎鏃� + if (tag.effect === 'dark') { + this.clickSelected = this.dynamicTags.length - 1 + } + this.dynamicTags.forEach((item, index) => { + if (item.seq === tag.seq) { + this.dynamicTags.splice(index, 1) + } + }) + + const routeSelectedArr = this.routeSelectedArr.find(item => item.stepname === tag.stepname) + + if (routeSelectedArr !== undefined) { + this.routeArr.push( + { + stepcode: routeSelectedArr.stepcode, + stepname: routeSelectedArr.stepname, + value: routeSelectedArr.value + } + ) + } + this.routeArr = this.routeArr.filter((currentValue, currentIndex, selfArr) => { + return selfArr.findIndex(item => item.stepcode === currentValue.stepcode) === currentIndex + }) + + // 閲嶆柊鎺掑簭 + this.dynamicTags.forEach((item, index) => { + item.editDisabled = true + item.seq = index + 1 + item.stepcode = '' + item.effect = index === this.dynamicTags.length - 1 ? 'dark' : 'light' + }) + this.addDisabled = false + }, + // tag娣诲姞鎸夐挳 + showInput() { + const seq = this.dynamicTags.findIndex(i => i.effect === 'dark') + 2 + + // 鍏堝皢姣忎釜鐨則ag鏍囩棰滆壊鏀逛负娴呰壊 + this.dynamicTags.forEach(i => { + i.effect = 'light' + }) + + this.autocompleteValue = '' + this.addDisabled = true + this.editDisabled = false + + this.dynamicTags.splice(this.clickSelected, 0, { editDisabled: true, seq: seq, stepname: '', effect: 'dark' }) + this.dynamicTags.forEach((item, index) => { + item.seq = index + 1 + item.stepcode = '' + }) + this.$nextTick(_ => { + this.$refs['saveTagInput' + seq][0].focus() + }) + + this.mouseFocusPosition = seq + + this.dynamicTags.forEach((item, index) => { + item.editDisabled = seq === index + 1 + }) + }, + + // 鑾峰彇宸ヨ壓璺嚎鍒楄〃娓呭崟 + async getRouteSearch() { + const res = await RouteSearch(this.form) + this.tableData = res.data + this.total = res.count + }, + // 鎺掑簭鏀瑰彉鏃� + sortChange({ column, prop, order }) { + if (order === 'descending') { + order = 'desc' + } else if (order === 'ascending') { + order = 'asc' + } else { + order = 'desc' + } + this.form.order = order + this.form.prop = prop + this.getRouteSearch() + }, + // 鏌ヨ + search() { + this.getRouteSearch() + }, + upload() { + + }, + // 閲嶇疆 + reset() { + this.form.routecode = '' + this.form.routename = '' + this.form.description = '' + this.form.createuser = '' + this.getRouteSearch() + }, + + // 鏂板鎸夐挳 + add(operation) { + this.operation = operation + this.dialogVisible = true + this.getStepSelectArr() + }, + // 宸ヨ壓璺嚎棰勮 + async edit(operation, row) { + this.operation = operation + this.dialogVisible = true + + const { data: res } = await ViewRoute({ routecode: row.code }) + + this.dynamicTags = [] + this.$nextTick(() => { + this.dialogForm.code = res[0].code + this.dialogForm.name = res[0].name + this.dialogForm.enable = res[0].enable + this.dialogForm.description = res[0].description + // this.dialogForm.Data = row.description + res[0].Data.forEach(item => { + this.dynamicTags.push( + { seq: item.seq, stepname: item.stepname, stepcode: item.stepcode, editDisabled: true, effect: 'light' } + ) + }) + }) + }, + // 鍒犻櫎鎸夐挳 + async del(row) { + this.$confirm('鏄惁纭鍒犻櫎?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + DeleteRoute({ routecode: row.code }).then(res => { + if (res.code === '200') { + this.$message.success('鍒犻櫎鎴愬姛!') + if (this.form.page > 1 && this.tableData.length === 1) { + this.form.page-- + } + this.getRouteSearch() + } + }) + }).catch(() => { + this.$message.info('宸插彇娑堝垹闄�') + }) + }, + // 澶嶅埗鎸夐挳 + async copy(operation, row) { + this.operation = operation + this.dialogVisible = true + + await this.getStepSelectArr() + const { data: res } = await ViewRoute({ routecode: row.code }) + // 寰呮敼 + this.dynamicTags = [] + this.routeSelectedArr = [] + this.$nextTick(() => { + this.dialogForm.code = res[0].code + this.dialogForm.name = res[0].name + this.dialogForm.enable = res[0].enable + this.dialogForm.description = res[0].description + res[0].Data.forEach((item, index) => { + this.dynamicTags.push( + { seq: item.seq, stepname: item.stepname, stepcode: item.stepcode, editDisabled: true, effect: index === res[0].Data.length - 1 ? 'dark' : 'light' } + ) + this.routeSelectedArr.push({ + stepcode: item.stepcode, + stepname: item.stepname, + value: item.stepname + }) + this.routeArr = this.routeArr.filter(i => i.stepcode !== item.stepcode) + }) + + this.addDisabled = false + this.clickSelected = this.dynamicTags.length + }) + }, + // 瀵硅瘽妗嗗叧闂簨浠� + handleClose() { + this.dialogForm.code = '' + this.dialogForm.name = '' + this.dialogForm.enable = 'Y' + this.dialogForm.description = '' + this.dialogForm.Data = [] + + this.dynamicTags = [ + { editDisabled: true, stepcode: '', seq: 1, stepname: ' ', effect: 'light' } + ] + this.addDisabled = true + this.routeSelectedArr = [] + this.$refs.dialogForm.clearValidate() + }, + // 瀵硅瘽妗嗗彇娑� + dialogVisibleCancel() { + this.dialogVisible = false + }, + // 瀵硅瘽妗嗙‘璁� + dialogVisibleConfirm() { + if (this.dynamicTags[0].stepname.trim() === '') { + return this.$message.info('宸ヨ壓璁剧疆绗竴椤逛笉鑳戒负绌猴紒') + } + const Data = [] + this.dynamicTags.forEach(item => { + Data.push({ + seq: item.seq, + stepcode: this.routeSelectedArr.find(it => it.stepname === item.stepname).stepcode, + stepname: item.stepname + }) + }) + + Data.forEach(item => { + if (item.stepname === this.routeSelectedArr.find(it => it.stepname === item.stepname).stepname) { + item.stepcode = this.routeSelectedArr.find(it => it.stepname === item.stepname).stepcode + } + }) + + this.$refs.dialogForm.validate(valid => { + if (valid) { + this.$store.state.app.buttonIsDisabled = true + const data = { + code: this.dialogForm.code, + name: this.dialogForm.name, + enable: this.dialogForm.enable, + description: this.dialogForm.description, + Data: Data + } + + AddUpdateRoute(this.dialogForm.id, this.operation === 'edit' ? 'Update' : 'Add', data).then(res => { + if (res.code === '200') { + this.dialogVisible = false + this.$message.success(this.operation === 'add' ? '娣诲姞鎴愬姛锛�' : '澶嶅埗鎴愬姛锛�') + this.getRouteSearch() + this.$store.state.app.buttonIsDisabled = false + } else { + this.$message.error(this.operation === 'add' ? '娣诲姞澶辫触锛�' : '澶嶅埗澶辫触锛�') + } + }) + } + }) + }, + // 鑾峰彇椤甸潰楂樺害 + getHeight() { + this.$nextTick(() => { + this.mainHeight = window.innerHeight - 85 + this.tableHeight = this.mainHeight - 195 + if (window.innerHeight < 769) { + this.tableHeight = this.tableHeight - 40 + } + this.isIpad = window.innerHeight < 769 && window.innerWidth < 1367 + this.$refs.tableDataRef.doLayout() + }) + }, + tableRowClassName({ row, rowIndex }) { + return 'custom-row' + } + } +} +</script> + +<style lang="scss" scoped> +$main_color: #42b983; + +/* +瀹炵幇宸ヨ壓璁剧疆鍔ㄦ�佹坊鍔犳牱寮� +*/ + +.orderNumber { + margin-bottom: 31px; + position: absolute; + margin-left: -7px; + z-index: 2; + width: 16px; + height: 16px !important; + font-size: 12px; + text-align: center; + line-height: 15px; + color: #FFFFFF; + background-color: #409EFF; + border-radius: 50%; +} + +.el-icon-edit { + width: 16px; + height: 16px; + border-radius: 50%; + padding: 3px 0 0 3px; + margin-left: 5px; + cursor: pointer; + position: absolute; + right: 3px; + bottom: 8px; +} + +.el-icon-edit:hover { + background-color: #99a9bf; + color: #FFFFFF; +} + +.el-icon-close { + position: absolute; + top: -8px; + z-index: 2; + left: 141px; + cursor: pointer; + color: #FFFFFF; + border-radius: 50%; + background-color: #ff7474; + padding: 1px 0 0 1px; +} + +//.el-icon-close:hover { +// background-color: #99a9bf; +//} + +.el-tag--dark { + background-color: $main_color; + border-color: $main_color; +} + +.tagSuccess { + margin-left: 20px; + width: 100px; + height: 32px; + display: flex; + justify-content: center; + color: $main_color; +} + +::v-deep .el-button--success { + width: 40px !important; + background-color: #ecf5ff; + border-radius: 0; + color: $main_color; +} + +::v-deep .el-button--success:disabled { + background-color: #eeeeee; + color: $main_color; +} + +::v-deep .el-tag { + //height: 30px; + border-radius: 0; + border: 1px solid $main_color; +} + +::v-deep .el-input--small .el-input__inner { + border-radius: 0; +} + +.settingDiv { + display: flex; + width: 100%; + padding-left: 7px; + height: 56px; + overflow-x: scroll; + overflow-y: hidden; + align-items: center; + background: aliceblue; +} + +.elTag { + margin-left: 0; + width: 150px; + position: relative; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.autocompleteClass { + .el-autocomplete-suggestion li { + //color: red; + } +} +</style> + +<style> +.el-table .custom-row { + background: #f8f8fa; +} +</style> -- Gitblit v1.9.3