diff --git a/packages/vue-cli-plugin-uni/lib/chain-webpack.js b/packages/vue-cli-plugin-uni/lib/chain-webpack.js index f740073d66964b55a986480a9e8395f329f0343e..8feb8fe0fe0d375cb2cd3f3536b1eecdfa03aeae 100644 --- a/packages/vue-cli-plugin-uni/lib/chain-webpack.js +++ b/packages/vue-cli-plugin-uni/lib/chain-webpack.js @@ -60,9 +60,9 @@ module.exports = function chainWebpack (platformOptions, vueOptions, api) { .use(`uniapp-preprocss`) .loader(resolve('packages/webpack-preprocess-loader')) .options(cssPreprocessOptions) - .before('css-loader') // 在 css-loader 之后条件编译一次,避免 import 进来的 css 没有走条件编译 + .after('css-loader') // 在 css-loader 之前条件编译一次 - if (loader) { // 在 scss,less,stylus 之前先条件编译一次 + if (loader) { // 在 scss,less,stylus 之前先条件编译一次(似乎没有必要了,保证css-loader处理一次即可,前提是条件编译注释都还存在) langRule.oneOf(type) .use(`uniapp-preprocss-` + lang) .loader(resolve('packages/webpack-preprocess-loader')) diff --git a/src/core/helpers/promise.js b/src/core/helpers/promise.js index f36f5a54cc76ac172e88a1c32fea59b248420d08..d6704f500e103a27ff9f41381f344b77197367be 100644 --- a/src/core/helpers/promise.js +++ b/src/core/helpers/promise.js @@ -12,14 +12,18 @@ const SYNC_API_RE = const CONTEXT_API_RE = /^create|Manager$/ +// Context例外情况 +const CONTEXT_API_RE_EXC = ['createBLEConnection'] + const TASK_APIS = ['request', 'downloadFile', 'uploadFile', 'connectSocket'] +// 同步例外情况 const ASYNC_API = ['createBLEConnection'] const CALLBACK_API_RE = /^on|^off/ export function isContextApi (name) { - return CONTEXT_API_RE.test(name) + return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1 } export function isSyncApi (name) { return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1 @@ -79,4 +83,4 @@ export function promisify (name, api) { }), ...params) }))) } -} +} diff --git a/src/platforms/app-plus/view/components/picker/index.vue b/src/platforms/app-plus/view/components/picker/index.vue index c89c98b7d54221f16accc4841be8dc3ca81a64f7..52339a0ced4a0d7b28376d7100927739ae13c7c9 100644 --- a/src/platforms/app-plus/view/components/picker/index.vue +++ b/src/platforms/app-plus/view/components/picker/index.vue @@ -42,6 +42,43 @@ function getDate (str, mode_) { } return date } + +function getDefaultStartValue () { + if (this.mode === mode.TIME) { + return '00:00' + } + if (this.mode === mode.DATE) { + let year = new Date().getFullYear() - 100 + switch (this.fields) { + case fields.YEAR: + return year + case fields.MONTH: + return year + '-01' + case fields.DAY: + return year + '-01-01' + } + } + return '' +} + +function getDefaultEndValue () { + if (this.mode === mode.TIME) { + return '23:59' + } + if (this.mode === mode.DATE) { + let year = new Date().getFullYear() + 100 + switch (this.fields) { + case fields.YEAR: + return year + case fields.MONTH: + return year + '-12' + case fields.DAY: + return year + '-12-31' + } + } + return '' +} + export default { name: 'Picker', mixins: [emitter], @@ -77,49 +114,27 @@ export default { }, start: { type: String, - default () { - if (this.mode === mode.TIME) { - return '00:00' - } - if (this.mode === mode.DATE) { - let year = new Date().getFullYear() - 60 - switch (this.fields) { - case fields.YEAR: - return year - case fields.MONTH: - return year + '-01' - default: - return year + '-01-01' - } - } - return '' - } + default: getDefaultStartValue }, end: { type: String, - default () { - if (this.mode === mode.TIME) { - return '23:59' - } - if (this.mode === mode.DATE) { - let year = new Date().getFullYear() + 60 - switch (this.fields) { - case fields.YEAR: - return year - case fields.MONTH: - return year + '-12' - default: - return year + '-12-31' - } - } - return '' - } + default: getDefaultEndValue }, disabled: { type: [Boolean, String], default: false } }, + data () { + return { + valueSync: null + } + }, + watch: { + value () { + this._setValueSync() + } + }, created () { this.$dispatch('Form', 'uni-form-group-update', { type: 'add', @@ -134,6 +149,7 @@ export default { }) } }) + this._setValueSync() }, beforeDestroy () { this.$dispatch('Form', 'uni-form-group-update', { @@ -142,6 +158,32 @@ export default { }) }, methods: { + _setValueSync () { + let val = this.value + switch (this.mode) { + case mode.MULTISELECTOR: + if (!Array.isArray(val)) { + val = [] + } + if (!Array.isArray(this.valueSync)) { + this.valueSync = [] + } + const length = this.valueSync.length = Math.max(val.length, this.range.length) + for (let index = 0; index < length; index++) { + const val0 = Number(val[index]) + const val1 = Number(this.valueSync[index]) + this.valueSync.splice(index, 1, isNaN(val0) ? (isNaN(val1) ? 0 : val1) : val0) + } + break + case mode.TIME: + case mode.DATE: + this.valueSync = String(val) + break + default: + this.valueSync = Number(val) || 0 + break + } + }, _show () { if (this.disabled) { return @@ -199,6 +241,28 @@ export default { }) } }, + _getFormData () { + return { + value: this.valueSync, + key: this.name + } + }, + _resetFormData () { + switch (this.mode) { + case mode.SELECTOR: + this.valueSync = -1 + break + case mode.MULTISELECTOR: + this.valueSync = this.value.map(val => 0) + break + case mode.DATE: + case mode.TIME: + this.valueSync = '' + break + default: + break + } + }, _updatePicker (data) { this.page && this.page.sendMessage(data) } diff --git a/src/platforms/h5/view/components/picker/index.vue b/src/platforms/h5/view/components/picker/index.vue index 363995ae1a88a1cccf1083bf9362d3090497182b..a06ce816b9ad2fc2e8ac42848ba40113ec93a069 100644 --- a/src/platforms/h5/view/components/picker/index.vue +++ b/src/platforms/h5/view/components/picker/index.vue @@ -296,7 +296,20 @@ export default { } }, _resetFormData () { - this.valueSync = 0 + switch (this.mode) { + case mode.SELECTOR: + this.valueSync = -1 + break + case mode.MULTISELECTOR: + this.valueSync = this.value.map(val => 0) + break + case mode.DATE: + case mode.TIME: + this.valueSync = '' + break + default: + break + } }, _createTime () { var hours = []