From 02bc9fafc73080c4c055af6a63dba94a39e81315 Mon Sep 17 00:00:00 2001 From: zhangxp <zhangxp@chicecm.com> Date: 星期二, 30 五月 2023 18:17:09 +0800 Subject: [PATCH] 集成默认页面 --- Source/UBCS-WEB/package.json | 1 Source/UBCS-WEB/src/components/transfer/index.vue | 224 ++++++++++++++++ Source/UBCS-WEB/src/views/flow/flowPath.vue | 7 Source/UBCS-WEB/package-lock.json | 6 Source/UBCS-WEB/src/components/transfer/transfer-panel.vue | 232 ++++++++++++++++ Source/UBCS-WEB/vue.config.js | 6 Source/UBCS-WEB/src/views/integration/integrationIndex.vue | 342 ++++++++++++++++++++++++ 7 files changed, 813 insertions(+), 5 deletions(-) diff --git a/Source/UBCS-WEB/package-lock.json b/Source/UBCS-WEB/package-lock.json index bdeb46f..a24650f 100644 --- a/Source/UBCS-WEB/package-lock.json +++ b/Source/UBCS-WEB/package-lock.json @@ -17,6 +17,7 @@ "js-base64": "^2.5.1", "js-cookie": "^2.2.0", "js-md5": "^0.7.3", + "js-pinyin": "^0.2.4", "mockjs": "^1.0.1-beta3", "node-gyp": "^5.0.6", "nprogress": "^0.2.0", @@ -9264,6 +9265,11 @@ "node": ">=0.6.0" } }, + "node_modules/js-pinyin": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/js-pinyin/-/js-pinyin-0.2.4.tgz", + "integrity": "sha512-JyWqZqdypu5R8QqTHRV/w6Y+3sxFqiTrnbodAj0d5SwfHIHg0gJBmsXv+kXd6NHkHrk37VrQ7WaAwungX+Ny0Q==" + }, "node_modules/js-queue": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", diff --git a/Source/UBCS-WEB/package.json b/Source/UBCS-WEB/package.json index ca32e57..3133c95 100644 --- a/Source/UBCS-WEB/package.json +++ b/Source/UBCS-WEB/package.json @@ -20,6 +20,7 @@ "js-base64": "^2.5.1", "js-cookie": "^2.2.0", "js-md5": "^0.7.3", + "js-pinyin": "^0.2.4", "mockjs": "^1.0.1-beta3", "node-gyp": "^5.0.6", "nprogress": "^0.2.0", diff --git a/Source/UBCS-WEB/src/components/transfer/index.vue b/Source/UBCS-WEB/src/components/transfer/index.vue new file mode 100644 index 0000000..f8af0ec --- /dev/null +++ b/Source/UBCS-WEB/src/components/transfer/index.vue @@ -0,0 +1,224 @@ +<template> + <div class="el-transfer"> + <transfer-panel v-bind="$props" ref="leftPanel" :data="sourceData" :title="titles[0] || t('el.transfer.titles.0')" + :default-checked="leftDefaultChecked" :placeholder="filterPlaceholder || t('el.transfer.filterPlaceholder')" + @checked-change="onSourceCheckedChange"> + <slot name="left-footer"></slot> + </transfer-panel> + <div class="el-transfer__buttons"> + <el-button type="primary" :class="['el-transfer__button', hasButtonTexts ? 'is-with-texts' : '']" + @click.native="addToLeft" :disabled="rightChecked.length === 0"> + <i class="el-icon-arrow-left"></i> + <span v-if="buttonTexts[0] !== undefined">{{ buttonTexts[0] }}</span> + </el-button> + <el-button type="primary" :class="['el-transfer__button', hasButtonTexts ? 'is-with-texts' : '']" + @click.native="addToRight" :disabled="leftChecked.length === 0"> + <span v-if="buttonTexts[1] !== undefined">{{ buttonTexts[1] }}</span> + <i class="el-icon-arrow-right"></i> + </el-button> + </div> + <transfer-panel v-bind="$props" ref="rightPanel" :data="targetData" :title="titles[1] || t('el.transfer.titles.1')" + :default-checked="rightDefaultChecked" :placeholder="filterPlaceholder || t('el.transfer.filterPlaceholder')" + @checked-change="onTargetCheckedChange"> + <slot name="right-footer"></slot> + </transfer-panel> + </div> +</template> + +<script> +import ElButton from 'element-ui/packages/button'; +import Emitter from 'element-ui/src/mixins/emitter'; +import Locale from 'element-ui/src/mixins/locale'; +import TransferPanel from './transfer-panel.vue'; +// import TransferPanel from './transfer-panel2.vue'; +import Migrating from 'element-ui/src/mixins/migrating'; + +export default { + name: 'ElTransfer', + + mixins: [Emitter, Locale, Migrating], + + components: { + TransferPanel, + ElButton + }, + + props: { + data: { + type: Array, + default() { + return []; + } + }, + titles: { + type: Array, + default() { + return []; + } + }, + buttonTexts: { + type: Array, + default() { + return []; + } + }, + filterPlaceholder: { + type: String, + default: '' + }, + filterMethod: Function, + leftDefaultChecked: { + type: Array, + default() { + return []; + } + }, + rightDefaultChecked: { + type: Array, + default() { + return []; + } + }, + renderContent: Function, + value: { + type: Array, + default() { + return []; + } + }, + format: { + type: Object, + default() { + return {}; + } + }, + filterable: Boolean, + props: { + type: Object, + default() { + return { + label: 'label', + key: 'key', + disabled: 'disabled' + }; + } + }, + targetOrder: { + type: String, + default: 'original' + } + }, + + data() { + return { + leftChecked: [], + rightChecked: [] + }; + }, + + computed: { + dataObj() { + const key = this.props.key; + return this.data.reduce((o, cur) => (o[cur[key]] = cur) && o, {}); + }, + + sourceData() { + return this.data.filter(item => this.value.indexOf(item[this.props.key]) === -1); + }, + + targetData() { + if (this.targetOrder === 'original') { + return this.data.filter(item => this.value.indexOf(item[this.props.key]) > -1); + } else { + return this.value.reduce((arr, cur) => { + const val = this.dataObj[cur]; + if (val) { + arr.push(val); + } + return arr; + }, []); + } + }, + + hasButtonTexts() { + return this.buttonTexts.length === 2; + } + }, + + watch: { + value:{ + handler(val) { + this.dispatch('ElFormItem', 'el.form.change', val); + }, + immediate:true, + deep:true + } + }, + + methods: { + getMigratingConfig() { + return { + props: { + 'footer-format': 'footer-format is renamed to format.' + } + }; + }, + + onSourceCheckedChange(val, movedKeys) { + this.leftChecked = val; + if (movedKeys === undefined) return; + this.$emit('left-check-change', val, movedKeys); + }, + + onTargetCheckedChange(val, movedKeys) { + this.rightChecked = val; + if (movedKeys === undefined) return; + this.$emit('right-check-change', val, movedKeys); + }, + + addToLeft() { + let currentValue = this.value.slice(); + this.rightChecked.forEach(item => { + const index = currentValue.indexOf(item); + if (index > -1) { + currentValue.splice(index, 1); + } + }); + this.$emit('input', currentValue); + this.$emit('change', currentValue, 'left', this.rightChecked); + }, + + addToRight() { + let currentValue = this.value.slice(); + let itemsToBeMoved = []; + const key = this.props.key; + this.data.forEach(item => { + const itemKey = item[key]; + if ( + this.leftChecked.indexOf(itemKey) > -1 && + this.value.indexOf(itemKey) === -1 + ) { + // itemsToBeMoved.push(itemKey) + itemsToBeMoved = [itemKey] + console.log(itemsToBeMoved) + } + }); + // currentValue = this.targetOrder === 'unshift' + // ? itemsToBeMoved.concat(currentValue) + // : currentValue.concat(itemsToBeMoved); + currentValue = itemsToBeMoved + this.$emit('input', currentValue); + this.$emit('change', currentValue, 'right', this.leftChecked); + }, + + clearQuery(which) { + if (which === 'left') { + this.$refs.leftPanel.query = ''; + } else if (which === 'right') { + this.$refs.rightPanel.query = ''; + } + } + } +}; +</script> + \ No newline at end of file diff --git a/Source/UBCS-WEB/src/components/transfer/transfer-panel.vue b/Source/UBCS-WEB/src/components/transfer/transfer-panel.vue new file mode 100644 index 0000000..4cde3a8 --- /dev/null +++ b/Source/UBCS-WEB/src/components/transfer/transfer-panel.vue @@ -0,0 +1,232 @@ +<template> + <div class="el-transfer-panel"> + <p class="el-transfer-panel__header"> + {{ title }} + </p> + + <div :class="['el-transfer-panel__body', hasFooter ? 'is-with-footer' : '']"> + <el-input class="el-transfer-panel__filter" v-model="query" size="small" :placeholder="placeholder" + @mouseenter.native="inputHover = true" @mouseleave.native="inputHover = false" v-if="filterable"> + <i slot="prefix" :class="['el-input__icon', 'el-icon-' + inputIcon]" @click="clearQuery"></i> + </el-input> + + <el-radio-group v-model="checked" v-show="!hasNoMatch && data.length > 0" + :class="{ 'is-filterable': filterable }" class="el-transfer-panel__list"> + <el-radio class="el-transfer-panel__item" :label="item[keyProp]" :disabled="item[disabledProp]" + :key="item[keyProp]" v-for="item in filteredData"><option-content + :option="item"></option-content></el-radio> + </el-radio-group> + <p class="el-transfer-panel__empty" v-show="hasNoMatch">{{ t('el.transfer.noMatch') }}</p> + <p class="el-transfer-panel__empty" v-show="data.length === 0 && !hasNoMatch">{{ t('el.transfer.noData') }}</p> + </div> + <p class="el-transfer-panel__footer" v-if="hasFooter"> + <slot></slot> + </p> + </div> +</template> + +<script> +import ElCheckboxGroup from 'element-ui/packages/checkbox-group'; +import ElCheckbox from 'element-ui/packages/checkbox'; +import ElInput from 'element-ui/packages/input'; +import Locale from 'element-ui/src/mixins/locale'; + +export default { + mixins: [Locale], + + name: 'ElTransferPanel', + + componentName: 'ElTransferPanel', + + components: { + ElCheckboxGroup, + ElCheckbox, + ElInput, + OptionContent: { + props: { + option: Object + }, + render(h) { + const getParent = vm => { + if (vm.$options.componentName === 'ElTransferPanel') { + return vm; + } else if (vm.$parent) { + return getParent(vm.$parent); + } else { + return vm; + } + }; + const panel = getParent(this); + const transfer = panel.$parent || panel; + return panel.renderContent + ? panel.renderContent(h, this.option) + : transfer.$scopedSlots.default + ? transfer.$scopedSlots.default({ option: this.option }) + : <span>{this.option[panel.labelProp] || this.option[panel.keyProp]}</span>; + } + } + }, + + props: { + data: { + type: Array, + default() { + return []; + } + }, + renderContent: Function, + placeholder: String, + title: String, + filterable: Boolean, + format: Object, + filterMethod: Function, + defaultChecked: Array, + props: Object + }, + + data() { + return { + checked: [], + allChecked: false, + query: '', + inputHover: false, + checkChangeByUser: true + }; + }, + + watch: { + checked(val, oldVal) { + this.updateAllChecked(); + let vals = Array.isArray(val)? val:[val] + let oldVals = Array.isArray(oldVal)? oldVal:[oldVal] + if (this.checkChangeByUser) { + const movedKeys = vals.concat(oldVals) + .filter(v => vals.indexOf(v) === -1 || oldVals.indexOf(v) === -1); + this.$emit('checked-change', vals,movedKeys); + } else { + this.$emit('checked-change', vals); + this.checkChangeByUser = true; + } + }, + + data() { + const checked = []; + const filteredDataKeys = this.filteredData.map(item => item[this.keyProp]); + let checkeds = Array.isArray(this.checked)? this.checked:[this.checked] + checkeds.forEach(item => { + if (filteredDataKeys.indexOf(item) > -1) { + checked.push(item); + } + }); + this.checkChangeByUser = false; + this.checked = checked; + }, + + checkableData() { + this.updateAllChecked(); + }, + + defaultChecked: { + immediate: true, + handler(val, oldVal) { + if (oldVal && val.length === oldVal.length && + val.every(item => oldVal.indexOf(item) > -1)) return; + const checked = []; + const checkableDataKeys = this.checkableData.map(item => item[this.keyProp]); + val.forEach(item => { + if (checkableDataKeys.indexOf(item) > -1) { + checked.push(item); + } + }); + this.checkChangeByUser = false; + this.checked = checked; + } + } + }, + + computed: { + filteredData() { + return this.data.filter(item => { + console.log(item) + if (typeof this.filterMethod === 'function') { + return this.filterMethod(this.query, item); + } else { + const label = item[this.labelProp] || item[this.keyProp].toString(); + return label.toLowerCase().indexOf(this.query.toLowerCase()) > -1; + } + }); + }, + + checkableData() { + return this.filteredData.filter(item => !item[this.disabledProp]); + }, + + checkedSummary() { + const checkedLength = this.checked.length; + const dataLength = this.data.length; + const { noChecked, hasChecked } = this.format; + if (noChecked && hasChecked) { + return checkedLength > 0 + ? hasChecked.replace(/\${checked}/g, checkedLength).replace(/\${total}/g, dataLength) + : noChecked.replace(/\${total}/g, dataLength); + } else { + return `${checkedLength}/${dataLength}`; + } + }, + + isIndeterminate() { + const checkedLength = this.checked.length; + return checkedLength > 0 && checkedLength < this.checkableData.length; + }, + + hasNoMatch() { + return this.query.length > 0 && this.filteredData.length === 0; + }, + + inputIcon() { + return this.query.length > 0 && this.inputHover + ? 'circle-close' + : 'search'; + }, + + labelProp() { + return this.props.label || 'label'; + }, + + keyProp() { + return this.props.key || 'key'; + }, + + disabledProp() { + return this.props.disabled || 'disabled'; + }, + + hasFooter() { + return !!this.$slots.default; + } + }, + + methods: { + updateAllChecked() { + + const checkableDataKeys = this.checkableData.map(item => item[this.keyProp]); + + this.allChecked = checkableDataKeys.length > 0 && + checkableDataKeys.every(item => this.checked===item); + }, + + handleAllCheckedChange(value) { + this.checked = value + ? this.checkableData.map(item => item[this.keyProp]) + : []; + }, + + clearQuery() { + if (this.inputIcon === 'circle-close') { + this.query = ''; + } + } + } +}; +</script> + \ No newline at end of file diff --git a/Source/UBCS-WEB/src/views/flow/flowPath.vue b/Source/UBCS-WEB/src/views/flow/flowPath.vue index f1fdcd4..8a034ed 100644 --- a/Source/UBCS-WEB/src/views/flow/flowPath.vue +++ b/Source/UBCS-WEB/src/views/flow/flowPath.vue @@ -12,7 +12,10 @@ <el-tab-pane label="娴佺▼璺熻釜" name="second"> <avue-crud :data="data" :option="option" ref="crud"> </avue-crud> - <el-image style="width: 100%; height: 100%" :src="url" fit="cover"></el-image> + <div style="padding: 10px 0; width: 100%; height: 100% "> + <el-image :src="url" flt="fill"></el-image> + </div> + </el-tab-pane> </el-tabs> </el-card> @@ -25,7 +28,7 @@ </div> <div style="width: 100%;"> <p>璇峰湪涓嬫柟杈撳叆鎮ㄧ殑瀹℃壒鎰忚锛�</p> - <el-input type="textarea" :rows="4" placeholder="璇疯緭鍏ュ唴瀹�" v-model="opinionVal"> + <el-input type="textarea" :rows="4" placeholder="璇疯緭鍏ュ唴瀹�" show-word-limit v-model="opinionVal"> </el-input> </div> <div style="width: 100%;"> diff --git a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue new file mode 100644 index 0000000..37dd110 --- /dev/null +++ b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue @@ -0,0 +1,342 @@ +<template> + <div> + <el-container style="height: 100%; border: 1px solid #fff"> + <el-card :style="{ marginRight: '10px' }"> + <el-aside width="300px" style="background-color: #fff"> + <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" v-model="filterText"> + </el-input> + <el-menu :default-openeds="['1', '3']"> + <el-tree class="filter-tree" :data="treeData" :props="defaultProps" default-expand-all + :filter-node-method="filterNode" ref="tree"> + </el-tree> + </el-menu> + </el-aside> + </el-card> + <el-main> + <el-card> + <avue-crud :data="tableData" :option="option" ref="crud" @row-update="addUpdate" @row-save="rowSave" + @row-click="handleRowClick"> + <template slot="menuLeft"> + <el-button icon="el-icon-plus" size="small" type="primary" @click="dialogPush = true">鏂� 澧� + </el-button> + <el-button icon="el-icon-check" size="small" type="primary" @click="handleSave">淇� 瀛� + </el-button> + <el-button icon="el-icon-connection" size="small" type="primary" @click="handleSync">鍚屾妯″瀷 + </el-button> + </template> + </avue-crud> + <el-card :style="{ marginTop: '20px' }"> + <avue-crud :data="tableData" :option="optinos" ref="crud" @row-update="addUpdate" + @row-save="rowSave" @row-click="handleRowClick"> + </avue-crud> + </el-card> + </el-card> + <el-dialog title="缂栫爜灞炴��" :visible.sync="dialogPush" destroy-on-close append-to-body="true" width="30%" + :before-close="handleClose"> + <el-form :model="form"> + <el-form-item label="鏌ヨ鏉′欢" label-width="70px" size="small"> + <el-input v-model="form.name" autocomplete="off" @change="handleQuery"></el-input> + </el-form-item> + </el-form> + <p class="text_tip">*閫夋嫨鍒嗙被杩涜灞炴�ц繃婊�, 鎴栬�呰緭鍏ュ睘鎬х殑鍏ㄦ嫾鎴栬�呯畝鎷艰繘琛屾煡璇�! 濡�: 濮撳悕 (鍙緭鍏m鎴杧inming )</p> + <transfer v-model="transferValue" :data="transferData" :filter-method="filterMethod" + filter-placeholder="璇疯緭鍏ュ睘鎬ф嫾闊冲叏鎷兼垨鑰呮嫾闊崇缉鍐�" @left-check-change="handelLeftCheck"></transfer> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogPush = false">鍙� 娑�</el-button> + <el-button type="primary" @click="dialogVisible = false">淇� 瀛�</el-button> + </span> + </el-dialog> + </el-main> + </el-container> + </div> +</template> +<script> +import transfer from '@/components/transfer/index' +import pinyin from 'js-pinyin' +export default { + components: { + transfer + }, + data() { + const generateData = () => { + pinyin.setOptions({ checkPolyphone: false, charCase: 1 }); + const data = []; + const cities = ['涓婃捣', '鍖椾含', '骞垮窞', '娣卞湷', '鍗椾含', '瑗垮畨', '鎴愰兘']; + cities.forEach((city, index) => { + data.push({ + label: city, + key: index, + pinyin: pinyin.getFullChars(city), + pinyins: pinyin.getCamelChars(city), + }); + }); + return data; + }; + return { + form: { + name: '', + }, + transferData: generateData(), + transferValue: [], + dialogPush: false, + tableData: [ + { + id: 1, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 2, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 3, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 3, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 3, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 3, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 3, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 3, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + }, + { + id: 3, + groupTypeName: '浜哄憳', + codeView: '缂栫爜瑙嗗浘', + sex: '鎬у埆', + typeName: '铻烘爴', + attributeName: '', + defaultValue: '', + } + ], + filterText: '', + optinos: { + title: '闆嗗洟灞炴��', + maxHeight: '300px', + menu: true, + delBtn: false, + addBtn: false, + index: true, + header: false, + columnBtn: false, + searchShow: true, + emptyBtn: false, + searchBtn: false, + searchShowBtn: false, + cellBtn: true, + border: true, + searchMenuSpan: 8, + column: [ + { label: '灞炴�ч泦鍥㈡灇涓惧��', prop: 'groupTypeName', minWidth: 80, }, + { label: '闆嗗洟灞炴�ф灇涓炬樉绀哄悕绉�', prop: 'codeView', minWidth: 80 }, + { label: 'MDM鏋氫妇鍊�', prop: 'sex', minWidth: 80 }, + { label: 'MDM鏋氫妇鏄剧ず鍚嶇О', prop: 'typeName', minWidth: 80, overHidden: true }, + ] + }, + option: { + maxHeight: '500px', + menu: true, + delBtn: false, + addBtn: false, + index: true, + header: true, + columnBtn: false, + searchShow: true, + emptyBtn: false, + searchBtn: false, + searchShowBtn: false, + cellBtn: true, + border: true, + searchMenuSpan: 8, + column: [ + { + label: '闆嗗洟鍒嗙被', + prop: 'groupTypeName', + minWidth: 80, + type: "select", + dicUrl: "/api/ubcs-system/dict/dictionary?code=org_category", + props: { + label: "dictValue", + value: "dictKey" + }, + slot: true, + search: true, + rules: [{ + message: "璇疯緭鍏ラ泦鍥㈠垎绫诲悕绉�" + }] + }, + { label: '鎵�灞炶鍥�', prop: 'codeView', minWidth: 80 }, + { label: '闆嗗洟灞炴��', prop: 'sex', minWidth: 80 }, + { label: '鍒嗙被鍚嶇О', prop: 'typeName', minWidth: 80, overHidden: true }, + { label: '灞炴�у悕绉�', prop: 'attributeName', minWidth: 80, cell: true }, + { label: '榛樿鍊�', prop: 'defaultValue', minWidth: 140, cell: true }, + ] + }, + treeData: [{ + id: 1, + label: '涓�绾� 1', + children: [{ + id: 4, + label: '浜岀骇 1-1', + children: [{ + id: 9, + label: '涓夌骇 1-1-1' + }, { + id: 10, + label: '涓夌骇 1-1-2' + }] + }] + }, { + id: 2, + label: '涓�绾� 2', + children: [{ + id: 5, + label: '浜岀骇 2-1' + }, { + id: 6, + label: '浜岀骇 2-2' + }] + }, { + id: 3, + label: '涓�绾� 3', + children: [{ + id: 7, + label: '浜岀骇 3-1' + }, { + id: 8, + label: '浜岀骇 3-2' + }] + }], + defaultProps: { + children: 'children', + label: 'label' + } + } + }, + watch: { + filterText(val) { + this.$refs.tree.filter(val); + } + }, + created() { + pinyin.setOptions({ checkPolyphone: false, charCase: 1 }); + console.log(pinyin.getFullChars('绠$悊鍛�')) + console.log(pinyin.getCamelChars('绠$悊鍛�')) + + }, + methods: { + filterNode(value, data) { + if (!value) return true; + return data.label.indexOf(value) !== -1; + }, + handleSave() { + + }, + handlePush() { + + }, + handelLeftCheck(event) { + console.log(event) + }, + addUpdate(event, done) { + console.log(event) + done() + }, + rowSave(event, done) { + console.log(event) + done() + }, + handleRowClick(row, event, column) { + console.log(row) + console.log(event) + console.log(column) + }, + handleQuery(event) { + console.log(event) + this.form.name = event + }, + filterMethod(query, item) { + return item.pinyins.indexOf(this.form.name) > -1; + }, + } +} +</script> +<style lang="scss" scoped> +.text_tip { + padding: 10px 0; + color: #F56C6C; +} + +/deep/ .el-transfer-panel__list { + width: 100%; +} + +/deep/ .el-input { + width: auto; +} + +/deep/ .el-transfer-panel { + width: 270px; +} + +/deep/ .el-transfer-panel__list { + height: 370px; +} + +/deep/ .el-transfer-panel__body { + height: 370px; +} +</style> \ No newline at end of file diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js index f2b7e3d..705c1e5 100644 --- a/Source/UBCS-WEB/vue.config.js +++ b/Source/UBCS-WEB/vue.config.js @@ -26,10 +26,10 @@ proxy: { '/api': { //鏈湴鏈嶅姟鎺ュ彛鍦板潃 - // target: 'http://localhost:37000', - //target: 'http://192.168.3.7:37000', + // target: 'http://localhost:37000', + // target: 'http://192.168.3.7:37000', target: 'http://dev.vci-tech.com:37000', - // target: 'http://192.168.1.51:37000/', + //target: 'http://192.168.1.51:37000/', //杩滅▼婕旂ず鏈嶅姟鍦板潃,鍙敤浜庣洿鎺ュ惎鍔ㄩ」鐩� // target: 'https://saber.bladex.vip/api', ws: true, -- Gitblit v1.9.3