feat:本地重构element-ui的时间选择器

This commit is contained in:
zhangyu
2021-04-28 15:18:21 +08:00
parent 0cbba3073d
commit 4b43934743
32 changed files with 166 additions and 63 deletions

View File

@@ -8,5 +8,32 @@
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"]
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"utils": {
"presets": [
[
"env",
{
"loose": true,
"modules": "commonjs",
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}
],
],
"plugins": [
["module-resolver", {
"root": ["element-ui"],
"alias": {
"element-ui/src": "element-ui/lib"
}
}]
]
},
"test": {
"plugins": ["istanbul"]
}
}
}

View File

@@ -8,8 +8,6 @@ function resolve (dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
@@ -25,8 +23,8 @@ module.exports = {
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
vue$: 'vue/dist/vue.esm.js',
'@': resolve('src')
}
},
module: {
@@ -37,9 +35,22 @@ module.exports = {
options: vueLoaderConfig
},
{
test: /\.js$/,
test: /\.(js)$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client'), resolve('node_modules/element-ui/packages/scrollbar')],
exclude: '/node_modules/',
options: {
presets: [
['env', {
modules: false,
targets: {
browsers: ['> 1%', 'last 2 versions', 'not ie <= 8']
}
}],
'stage-2'
],
plugins: ['transform-vue-jsx', 'transform-runtime']
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,

View File

@@ -48,7 +48,7 @@
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-core": "^6.26.0",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.1",
"babel-plugin-syntax-jsx": "^6.18.0",

View File

@@ -85,3 +85,26 @@
.orange-bg {
background-color: var(--theme-color) !important;
}
.timezone-area{
display: inline-block;
vertical-align: middle;
width: auto;
font-size: 14px;
float: left;
margin-left: 10px;
font-family: PingFangSC-Regular;
color: #333333;
line-height: 20px;
font-weight: 400;
}
.timezone-offset{
display: inline-block;
vertical-align: middle;
width: auto;
font-size: 14px;
margin-right: 10px;
font-family: PingFangSC-Regular;
color: #333333;
line-height: 20px;
font-weight: 400;
}

View File

@@ -674,7 +674,7 @@ export default {
}
if (!param.query) delete param.query
// 根据panelId获得panel下的所有图表
this.$get('visual/panel/chart?panelId=' + params.panelId + '&groupId=0').then(response => {
this.$get('visual/panel/chart?panelId=' + params.panelId + '&pageSize=-1').then(response => {
if (response.code === 200) {
response.data.list.forEach((item, index) => {
item.isLoaded = false

View File

@@ -60,7 +60,7 @@
<!-- <time-picker ref="calendarPanel" class="nz-dashboard-picker" style="margin-top: -12px;" @change="dateChange" v-if="chart.type !='text'"></time-picker>-->
<pick-time :refresh-data-func="dateChange" v-model="searchTime" :use-chart-unit="false" ref="pickTime" style="height: 28px;" id="chart-preview"></pick-time>
<!--
<el-date-picker ref="calendar" prefix-icon=" " size="mini" class="nz-preview-picker"
<my-date-picker ref="calendar" prefix-icon=" " size="mini" class="nz-preview-picker"
format="yyyy/MM/dd HH:mm"
@change="dateChange"
v-model="searchTime"
@@ -70,7 +70,7 @@
:start-placeholder="$t('dashboard.panel.startTime')"
:end-placeholder="$t('dashboard.panel.endTime')"
align="right">
</el-date-picker>-->
</my-date-picker>-->
</div>
</div>

View File

@@ -19,7 +19,7 @@
</el-input>
</div>
<div class="margin-r-20 nz-btn-group nz-btn-group-size-small nz-btn-group-light">
<button @click="changeTime(-10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-prepend" id="endpoint-query-changetime"><i class="el-icon-d-arrow-left"></i></button><el-date-picker
<button @click="changeTime(-10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-prepend" id="endpoint-query-changetime"><i class="el-icon-d-arrow-left"></i></button><my-date-picker
v-model="formatTime"
type="datetime"
size="mini"
@@ -29,7 +29,7 @@
placeholder="Moment"
value-format="yyyy-MM-dd HH:mm:ss"
>
</el-date-picker><button @click="changeTime(10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-append"><i class="el-icon-d-arrow-right"></i></button>
</my-date-picker><button @click="changeTime(10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-append"><i class="el-icon-d-arrow-right"></i></button>
</div>
<div class="nz-btn-group nz-btn-group-size-normal nz-btn-group-light" style="height: 24px;">
<button class="nz-btn nz-btn-size-normal nz-btn-style-light" @click="viewGraph">

View File

@@ -32,7 +32,7 @@
</el-input>
</div>
<div class="margin-r-20 nz-btn-group nz-btn-group-size-small nz-btn-group-light">
<button @click="changeTime(-10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-prepend" id="endpoint-query-changetime"><i class="el-icon-d-arrow-left"></i></button><el-date-picker
<button @click="changeTime(-10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-prepend" id="endpoint-query-changetime"><i class="el-icon-d-arrow-left"></i></button><my-date-picker
v-model="formatTime"
type="datetime"
size="mini"
@@ -43,7 +43,7 @@
value-format="yyyy-MM-dd HH:mm:ss"
@change="pickTime"
>
</el-date-picker><button @click="changeTime(10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-append"><i class="el-icon-d-arrow-right"></i></button>
</my-date-picker><button @click="changeTime(10)" class="nz-btn nz-btn-size-normal nz-btn-style-light change-time-height nz-input-group-append"><i class="el-icon-d-arrow-right"></i></button>
</div>
<div class="nz-btn-group nz-btn-group-size-normal nz-btn-group-light" style="height: 24px;">
<button class="nz-btn nz-btn-size-normal nz-btn-style-light" @click="viewGraph">

View File

@@ -50,6 +50,7 @@
<script>
import { mapActions } from 'vuex'
import moment from 'moment-timezone'
export default {
name: 'login',
data () {

View File

@@ -116,11 +116,11 @@
<!-- name="multiple-time-datepicker"-->
<transition>
<div v-show="showDropdown" id="panel-calender" class="calendar">
<el-date-picker prefix-icon=" " size="mini" ref="calendar"
<my-date-picker prefix-icon=" " size="mini" ref="calendar"
format="yyyy/MM/dd HH:mm:ss" class="panel-time-picker-hidden" @change="dateChange" v-model="startTime" type="datetime"
popper-class="panel-time-picker-popper"
align="right">
</el-date-picker>
</my-date-picker>
<!--
<button type="button" style="border-radius: 1px 1px 1px 1px" @click="right()" v-show="isCustom"
class="nz-btn nz-btn-size-normal nz-btn-style-light time-picker-button time-picker-right-button" >
@@ -373,6 +373,7 @@ export default {
} else {
this.isCustom = true
this.$refs.calendar.focus()
this.$refs.calendar.pickerVisible = true
}
} else {
this.isCustom = false

View File

@@ -1,7 +1,14 @@
import DatePicker from './src/picker/date-picker'
import localeEn from 'element-ui/lib/locale/lang/en'
import localeCn from 'element-ui/lib/locale/lang/zh-CN'
import { use } from 'element-ui/src/locale/'
/* istanbul ignore next */
DatePicker.install = function install (Vue) {
if (localStorage.getItem('nz-language') === 'cn') {
use(localeCn)
} else {
use(localeEn)
}
Vue.component(DatePicker.name, DatePicker)
}

View File

@@ -54,11 +54,15 @@ const removeFromArray = function (arr, pred) {
const idx = typeof pred === 'function' ? arrayFindIndex(arr, pred) : arr.indexOf(pred)
return idx >= 0 ? [...arr.slice(0, idx), ...arr.slice(idx + 1)] : arr
}
import moment from 'moment-timezone'
export default {
mixins: [Locale],
props: {
timezone: {
type: String,
default: moment.tz.guess() // 没有传则使用本地的时区
},
firstDayOfWeek: {
default: 7,
type: Number,
@@ -144,7 +148,7 @@ export default {
const disabledDate = this.disabledDate
const cellClassName = this.cellClassName
const selectedDate = this.selectionMode === 'dates' ? coerceTruthyValueToArray(this.value) : []
const now = getDateTimestamp(new Date())
const now = getDateTimestamp(new Date( moment().tz(this.timezone).format('YYYY/MM/DD HH:mm:ss')))
for (let i = 0; i < 6; i++) {
const row = rows[i]

View File

@@ -111,6 +111,7 @@
<div>{{ leftLabel }}</div>
</div>
<date-table
:timezone="timezone"
selection-mode="range"
:date="leftDate"
:default-value="defaultValue"
@@ -151,6 +152,7 @@
<div>{{ rightLabel }}</div>
</div>
<date-table
:timezone="timezone"
selection-mode="range"
:date="rightDate"
:default-value="defaultValue"
@@ -167,13 +169,15 @@
</div>
</div>
<div class="el-picker-panel__footer" v-if="showTime">
<el-button
size="mini"
type="text"
class="el-picker-panel__link-btn"
@click="handleClear">
{{ t('el.datepicker.clear') }}
</el-button>
<span class="timezone-area">{{timezone}}</span>
<span class="timezone-offset">{{timezoneOffset}}</span>
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- class="el-picker-panel__link-btn"-->
<!-- @click="handleClear">-->
<!-- {{ t('el.datepicker.clear') }}-->
<!-- </el-button>-->
<el-button
plain
size="mini"

View File

@@ -89,6 +89,7 @@
<div class="el-picker-panel__content">
<date-table
:timezone="timezone"
v-show="currentView === 'date'"
@pick="handleDatePick"
:selection-mode="selectionMode"
@@ -122,6 +123,8 @@
<div
class="el-picker-panel__footer"
v-show="footerVisible && currentView === 'date'">
<span class="timezone-area">{{timezone}}</span>
<span class="timezone-offset">{{timezoneOffset}}</span>
<el-button
size="mini"
type="text"

View File

@@ -72,6 +72,10 @@
</month-table>
</div>
</div>
<div class="el-picker-panel__footer" v-if="showTime">
<span class="timezone-area">{{timezone}}</span>
<span class="timezone-offset">{{timezoneOffset}}</span>
</div>
</div>
</div>
</transition>

View File

@@ -41,6 +41,8 @@
</div>
</div>
<div class="el-time-panel__footer">
<span class="timezone-area">{{timezone}}</span>
<span class="timezone-offset">{{timezoneOffset}}</span>
<button
type="button"
class="el-time-panel__btn cancel"

View File

@@ -16,6 +16,8 @@
</time-spinner>
</div>
<div class="el-time-panel__footer">
<!-- <span class="timezone-area">{{timezone}}</span>-->
<!-- <span class="timezone-offset">{{timezoneOffset}}</span>-->
<button
type="button"
class="el-time-panel__btn cancel"

View File

@@ -91,7 +91,7 @@ import Popper from 'element-ui/src/utils/vue-popper'
import Emitter from 'element-ui/src/mixins/emitter'
import ElInput from 'element-ui/packages/input'
import merge from 'element-ui/src/utils/merge'
import moment from 'moment-timezone'
const NewPopper = {
props: {
appendToBody: Popper.props.appendToBody,
@@ -343,6 +343,10 @@ export default {
},
props: {
timezone: {
type: String,
default: localStorage.getItem('nz-sys-timezone') // 没有传则使用本地的时区
},
size: String,
format: String,
valueFormat: String,
@@ -821,6 +825,12 @@ export default {
},
mountPicker () {
let tempFun = this.panel.data
this.panel.data = () => {return {
timezone: this.timezone, // add timezone to panel component
timezoneOffset: moment.tz(this.timezone).format('Z'),
...tempFun()
}}
this.picker = new Vue(this.panel).$mount()
this.picker.defaultValue = this.defaultValue
this.picker.defaultTime = this.defaultTime

View File

@@ -15,7 +15,7 @@ const getPanel = function (type) {
export default {
mixins: [Picker],
name: 'ElDatePicker',
name: 'myDatePicker',
props: {
type: {

View File

@@ -1692,7 +1692,6 @@ export default {
responseType: 'arraybuffer'
})
.then(res => {
console.log(res.data)
return ('data:image/jpeg;base64,' + btoa(new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '')))
})
.then(data => {

View File

@@ -35,7 +35,7 @@
<div class="datepicker">
<div class="datepicker-box">
<span class="datepicker-title">start time</span>
<el-date-picker prefix-icon=" " class="panel-time-picker-hidden " size="mini" ref="calendar"
<my-date-picker prefix-icon=" " class="panel-time-picker-hidden " size="mini" ref="calendar"
format="yyyy/MM/dd HH:mm:ss" @change="(val)=>{dateChange(val,'startAt')}" v-model="editAlertSilence.startAt"
:picker-options="optionsStartAt"
type="datetime"
@@ -44,11 +44,11 @@
:placeholder="$t('dashboard.panel.startTime')"
align="right"
>
</el-date-picker>
</my-date-picker>
</div>
<div class="datepicker-box">
<span class="datepicker-title">end time</span>
<el-date-picker prefix-icon=" " class="panel-time-picker-hidden " size="mini" ref="calendar"
<my-date-picker prefix-icon=" " class="panel-time-picker-hidden " size="mini" ref="calendar"
format="yyyy/MM/dd HH:mm:ss" @change="(val)=>{dateChange(val,'endAt')}" v-model="editAlertSilence.endAt"
:picker-options="optionsEndAt"
type="datetime"
@@ -57,7 +57,7 @@
:placeholder="$t('dashboard.panel.startTime')"
align="right"
>
</el-date-picker>
</my-date-picker>
</div>
<!--( :range-separator="")-->
</div>

View File

@@ -125,17 +125,17 @@
</template>
<template v-else>
<template v-if="label.interval">
<el-date-picker
<my-date-picker
id="asset-box-input-purchase-date"
v-model="label.value[0]"
:type="JSON.parse(label.param).subType === assetConstants.labelSubTypeData.date ? 'dateRange' : 'datetimerange'"
placeholder=""
size="small"
style="width: 100%">
</el-date-picker>
</my-date-picker>
</template>
<template v-else>
<el-date-picker
<my-date-picker
id="asset-box-input-parchase-date"
v-model="label.value[0]"
:type="JSON.parse(label.param).subType"
@@ -143,7 +143,7 @@
size="small"
style="width: 100%"
value-format="yyyy-MM-dd">
</el-date-picker>
</my-date-picker>
</template>
</template>
</template>

View File

@@ -62,7 +62,7 @@
<el-input v-else v-model="lockLocationInputValue" disabled size="small"></el-input>
</el-form-item>
<el-form-item :label="$t('asset.purchaseDate')" prop="purchaseDate">
<el-date-picker
<my-date-picker
id="asset-box-input-parchase-date"
v-model="editAsset.purchaseDate"
placeholder=""
@@ -70,7 +70,7 @@
style="width: 100%"
type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</my-date-picker>
</el-form-item>
<!-- labels -->
<div class="form__sub-title">{{$t('overall.labels')}}</div>
@@ -128,17 +128,17 @@
</template>
<template v-else>
<template v-if="label.interval">
<el-date-picker
<my-date-picker
id="asset-box-input-purchase-date"
v-model="label.value[0]"
:type="JSON.parse(label.param).subType === assetConstants.labelSubTypeData.date ? 'dateRange' : 'datetimerange'"
placeholder=""
size="small"
style="width: 100%">
</el-date-picker>
</my-date-picker>
</template>
<template v-else>
<el-date-picker
<my-date-picker
id="asset-box-input-parchase-date"
v-model="label.value[0]"
:type="JSON.parse(label.param).subType"
@@ -146,7 +146,7 @@
size="small"
style="width: 100%"
value-format="yyyy-MM-dd">
</el-date-picker>
</my-date-picker>
</template>
</template>
</template>

View File

@@ -66,7 +66,7 @@
</el-form-item>
<el-form-item :label="$t('asset.purchaseDate')">
<div class="select-style">
<el-date-picker
<my-date-picker
id="asset-box-input-parchase-date"
size="small"
v-model="editAsset.purchaseDate"
@@ -74,7 +74,7 @@
type="date"
style="width: 100%"
placeholder="">
</el-date-picker>
</my-date-picker>
</div>
</el-form-item>
<el-form-item :label="$t('asset.location')" class="required-marker" prop="locationInfo" :rules="[{validator:locationValidator, trigger:'blur'}]">

View File

@@ -162,7 +162,7 @@
</ul>
</div>
</div>
<el-date-picker
<my-date-picker
v-model="timeFrame"
type="datetimerange"
range-separator="To"
@@ -172,7 +172,7 @@
:class="dataBackG?'':'dataBackG'"
v-if="ind==sreach_num&&val.id==7"
>
</el-date-picker>
</my-date-picker>
</li>
<!-- 最开始的input框-->
<li class="select_input" v-if="change_sreach_show">

View File

@@ -88,13 +88,13 @@
</style>
<template>
<div id="panel-calender" :class="{'calendar--small': size === 'small'}" class="calendar">
<el-date-picker prefix-icon=" " class="panel-time-picker-hidden " size="mini" ref="calendar"
<my-date-picker prefix-icon=" " class="panel-time-picker-hidden " size="mini" ref="calendar"
format="yyyy/MM/dd HH:mm:ss" @change="dateChange" v-model="searchTime" type="datetimerange"
popper-class="panel-time-picker-popper"
:range-separator="$t('dashboard.panel.to')"
:start-placeholder="$t('dashboard.panel.startTime')"
:end-placeholder="$t('dashboard.panel.endTime')" align="right">
</el-date-picker>
</my-date-picker>
<!--
<button type="button" style="border-radius: 1px 1px 1px 1px" @click="right()" v-show="isCustom"
class="nz-btn nz-btn-size-normal nz-btn-style-light time-picker-button time-picker-right-button" >
@@ -335,6 +335,8 @@ export default {
} else {
this.isCustom = true
this.$refs.calendar.focus()
this.$refs.calendar.pickerVisible = true
console.log(this.$refs.calendar)
}
} else {
this.isCustom = false

View File

@@ -46,7 +46,7 @@
</div>
<div v-else-if="type==='datetime'">
<div v-if="param.subType==='date'">
<el-date-picker
<my-date-picker
size="small"
:type="param.interval?'daterange':'date'"
:range-separator="$t('dashboard.panel.to')"
@@ -54,7 +54,7 @@
:start-placeholder="$t('dashboard.panel.startTime')"
:end-placeholder="$t('dashboard.panel.endTime')"
>
</el-date-picker>
</my-date-picker>
</div>
<div v-if="param.subType==='time'">
<el-time-picker
@@ -68,14 +68,14 @@
</el-time-picker>
</div>
<div v-if="param.subType==='datetime'">
<el-date-picker
<my-date-picker
size="small"
:type="param.interval?'datetimerange':'datetime'"
:range-separator="$t('dashboard.panel.to')"
:placeholder="$t('alert.silence.selectTime')"
:start-placeholder="$t('dashboard.panel.startTime')"
:end-placeholder="$t('dashboard.panel.endTime')">
</el-date-picker>
</my-date-picker>
</div>
</div>
<div v-else-if="type==='email'" :class="emailError?'emailError':''">

View File

@@ -50,7 +50,7 @@
</template>
<template v-if="item.prop == 'expireAt'">
<!-- <el-popover :content="rules.expireAt.message" placement="top" trigger="manual" v-model="rules.expireAt.switch" popper-class="small-pop warn-pop" @after-enter="popShow(rules.expireAt)">-->
<el-date-picker
<my-date-picker
slot="reference"
style="width: 100%;"
v-model="scope.row[item.prop]"
@@ -60,7 +60,7 @@
type="datetime"
:picker-options="pickerOptions"
:placeholder="$t('el.datepicker.selectTime')">
</el-date-picker>
</my-date-picker>
<!-- </el-popover>-->
</template>
</template>

View File

@@ -17,7 +17,7 @@
<!--<div class="top-tools">
<div class="float-right mr-10">
<el-date-picker size="mini" ref="calendar"
<my-date-picker size="mini" ref="calendar"
format="yyyy/MM/dd HH:mm"
@change="dateChange"
v-model="searchTime"
@@ -27,7 +27,7 @@
:start-placeholder="$t('dashboard.panel.startTime')"
:end-placeholder="$t('dashboard.panel.endTime')"
align="right">
</el-date-picker>
</my-date-picker>
</div>
</div>-->
<div class="table-list" >
@@ -38,7 +38,7 @@
</el-col>
<el-col :span="0.5" ><div>&nbsp;</div></el-col>
<el-col :span="13" class="chart-preview-area" >
<el-date-picker size="mini" ref="calendar"
<my-date-picker size="mini" ref="calendar"
format="yyyy/MM/dd HH:mm"
@change="dateChange"
v-model="searchTime"
@@ -49,7 +49,7 @@
:end-placeholder="$t('dashboard.panel.endTime')"
style="position:absolute; right: 10px"
align="right">
</el-date-picker>
</my-date-picker>
<el-row class="border-area" v-show="chartCount === 'single'" style="margin-top: 40px;">
<div class="chartBox">
<line-chart-block

View File

@@ -57,7 +57,7 @@
</template>
<template v-slot:after>
<el-dropdown-item v-has="'panel_chart_add'">
<div id="chart-temp-add" @click="addChartByTemp"><i class="nz-icon nz-icon-download1"></i>Add template</div>
<div id="chart-temp-add" @click="addChartByTemp"><i class="nz-icon nz-icon-download1"></i>Add by template</div>
</el-dropdown-item>
</template>
</top-tool-more-options>

View File

@@ -31,15 +31,16 @@ import loading from '@/components/common/loading'
import pickTime from '@/components/common/pickTime'
import bus from '@/libs/bus'
import theme from '@/assets/css/theme.scss'
import myDatePicker from '@/components/common/myDatePicker'
import vSelectPage from 'v-selectpage'
Vue.use(vSelectPage)
Vue.use(myDatePicker)
Vue.component('Pagination', Pagination)
Vue.component('searchInput', searchInput)
Vue.component('element-set', elementSet)
Vue.component('loading', loading)
Vue.component('pick-time', pickTime)
Vue.component('myDatePicker', myDatePicker)
Vue.prototype.$axios = axios
Vue.prototype.$post = post

View File

@@ -2,6 +2,7 @@ import { post } from '../http'
import router from '../router'
import bus from '../libs/bus'
import { sortByOrderNum } from '../permission'
import moment from 'moment-timezone'
const user = {
state: {
@@ -44,6 +45,7 @@ const user = {
localStorage.setItem('nz-sys-logo', res.data.systemLogo)
}
localStorage.setItem('nz-sys-timezone', res.data.timezone)
localStorage.setItem('timezoneOffset', moment.tz(res.data.timezone).format('Z'))
localStorage.setItem('nz-sys-default-cabinet-usize', res.data.defaultCabinetUsize)
localStorage.setItem('nz-sys-max-terminal-num', res.data.maxTerminalNum)
localStorage.setItem('nz-sys-asset-ping-switch', res.data.assetPingSwitch)