From 375c4bf250623998f8b98d371e33015e1d6fb5af Mon Sep 17 00:00:00 2001 From: "zebin.wu" Date: Tue, 11 Aug 2020 20:32:38 +0800 Subject: [PATCH] feat: 0.25.28 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同步代码 --- babel.config.js | 27 +++ build/webpack.component.js | 170 ++++++++++++++++++ docs/package.json | 2 +- .../.vuepress/components/api/icon/list.vue | 8 +- .../.vuepress/components/changelog/logs.js | 19 +- .../components/{block => field}/tree/block.js | 0 .../components/{block => field}/tree/demo.vue | 0 docs/zh-CN/.vuepress/config.js | 6 +- docs/zh-CN/api/quickstart.md | 96 ++++++++++ docs/zh-CN/api/template.md | 37 ++++ docs/zh-CN/assets/cli-npm.png | Bin 0 -> 10609 bytes docs/zh-CN/assets/market-config.png | Bin 0 -> 15407 bytes docs/zh-CN/block/list.md | 2 + docs/zh-CN/{block => field}/tree.md | 2 +- .../cases-block/list/list-operations.js | 8 + .../cases-block/list/list-simulate.js | 49 +++++ .../src/ams-config/cases-field/select.js | 6 + examples/router/src/ams-config/index.js | 1 + examples/router/src/ams-config/router.js | 5 + package.json | 8 +- packages/block-image-label/package.json | 2 +- packages/field-tag/package.json | 2 +- src/ams/configs/alias/field.js | 5 + src/ams/mixins/field-button-mixin.js | 6 +- src/blocks/block/operations.vue | 6 +- src/blocks/list/list.vue | 21 ++- src/blocks/table/table.vue | 2 + src/fields/audio/audio-edit.vue | 6 +- src/fields/file/file-edit.vue | 6 +- src/fields/image/image-edit.vue | 11 +- src/fields/object/object-edit.vue | 26 ++- src/fields/unitselect/unitselect-edit.vue | 2 + src/fields/video/video-edit.vue | 6 +- src/index.js | 2 +- src/utils/index.js | 58 ++++++ 35 files changed, 576 insertions(+), 31 deletions(-) create mode 100644 babel.config.js create mode 100644 build/webpack.component.js rename docs/zh-CN/.vuepress/components/{block => field}/tree/block.js (100%) rename docs/zh-CN/.vuepress/components/{block => field}/tree/demo.vue (100%) create mode 100644 docs/zh-CN/api/quickstart.md create mode 100644 docs/zh-CN/api/template.md create mode 100644 docs/zh-CN/assets/cli-npm.png create mode 100644 docs/zh-CN/assets/market-config.png rename docs/zh-CN/{block => field}/tree.md (80%) create mode 100644 examples/router/src/ams-config/cases-block/list/list-simulate.js diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..95e2df65 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,27 @@ +module.exports = function (api) { + api.cache(true); + + const presets = [ + [ + '@babel/preset-env', + { + 'modules': false, + 'loose': true, + 'targets': { + 'browsers': ['> 1%', 'last 2 versions', 'not ie <= 8'] + } + } + ] + ]; + const plugins = ['transform-vue-jsx', '@babel/plugin-transform-runtime']; + const env = { + 'test': { + 'presets': [['@babel/preset-env', { 'targets': { 'node': 'current' }}]] + } + }; + return { + presets, + plugins, + env + }; +}; diff --git a/build/webpack.component.js b/build/webpack.component.js new file mode 100644 index 00000000..3070a877 --- /dev/null +++ b/build/webpack.component.js @@ -0,0 +1,170 @@ +const path = require('path'); +const webpack = require('webpack'); +const ProgressBarPlugin = require('progress-bar-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const vueLoaderConfig = require('./vue-loader.conf'); +const FileManagerPlugin = require('filemanager-webpack-plugin'); +// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; + +const getPackages = require('./get-packages'); +let Components = getPackages(); +const config = require('./config'); + +const entrys = {}; +let externals = { + vue: config.vue, + '@ams-team/ams': config.ams, + 'element-ui': config.element +}; +const moveFiles = []; + +// 打包类型 +let libraryTarget = process.argv && process.argv[5] || 'commonjs2' + +const webpackConfig = env => { + // 如果通过 npm run components -- --env.pkg=field-editor 传入会获取到 pkg,打包单一模块 + if (env) { + if (env.pkg) { + Components = { + [env.pkg]: Components[env.pkg] + }; + } + } + // 遍历需要打包的组件 + Object.keys(Components).forEach(function(name) { + const componentPath = `packages/${name}`; + entrys[componentPath + '/lib/' + name] = path.join( + process.cwd(), + componentPath, + 'src/index' + ); + if (name === 'block-chart') { + entrys[componentPath + '/lib/theme/vipshop'] = path.join( + process.cwd(), + componentPath, + 'src/theme/vipshop' + ); + if (libraryTarget === 'umd') { + moveFiles.push({ + source: path.join( + process.cwd(), + componentPath, + 'lib/theme/vipshop.umd.js' + ), + destination: + './dist/' + + (/^field-/.test(name) ? 'fields/' : 'block/') + + name + + '-theme-vipshop@' + + Components[name].version + + '.js' + }); + } + } + if (Components[name].externals) { + externals = { + ...externals, + ...Components[name].externals + }; + } + // 不想发布的包将publish置为false + if (Components[name].publish !== false && libraryTarget === 'umd') { + moveFiles.push({ + source: path.join( + process.cwd(), + componentPath, + 'lib/' + name + '.umd.js' // 只拷贝打包为umd的类型 + ), + destination: + './dist/' + + (/^field-/.test(name) ? 'fields/' : 'block/') + + name + + '@' + + Components[name].version + + '.js' + }); + } + }); + + return { + mode: 'production', + entry: entrys, + output: { + path: path.resolve(process.cwd(), './'), + filename: libraryTarget === 'umd' ? '[name].umd.js' : '[name].js', + chunkFilename: '[id].js', + libraryTarget, + }, + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: config.alias + }, + externals: externals, + module: { + rules: [ + { + test: /\.(jsx?|babel|es6)$/, + include: process.cwd(), + exclude: config.jsexclude, + loader: 'babel-loader' + }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: vueLoaderConfig + }, + { + test: /\.css$/, + loaders: ['style-loader', 'css-loader', 'postcss-loader'] + }, + { + test: /\.scss$/, + loaders: ['style-loader', 'css-loader', 'sass-loader'] + }, + { + test: /\.otf|ttf|woff2?|eot(\?\S*)?$/, + loader: 'url-loader', + query: { + limit: 30000, + name: path.posix.join('static', '[name].[hash:7].[ext]') + } + }, + { + test: /\.svg(\?\S*)?$/, + loader: 'url-loader', + query: { + limit: 30000, + name: path.posix.join('static', '[name].[hash:7].[ext]') + } + }, + { + test: /\.(gif|png|jpe?g)(\?\S*)?$/, + loader: 'url-loader', + query: { + limit: 10000, + name: path.posix.join('static', '[name].[hash:7].[ext]') + } + } + ] + }, + plugins: [ + new ProgressBarPlugin(), + new webpack.LoaderOptionsPlugin({ + minimize: true + }), + new VueLoaderPlugin(), + new FileManagerPlugin({ + onEnd: { + mkdir: [ + './dist/block', + './dist/fields', + ], + move: moveFiles + } + }) + // new BundleAnalyzerPlugin() + ] + }; +}; + +module.exports = webpackConfig; diff --git a/docs/package.json b/docs/package.json index 6662df86..63fe781c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -6,7 +6,7 @@ }, "private": true, "dependencies": { - "@ams-team/ams": "latest", + "@ams-team/ams": "^0.25.28", "@ams-team/block-ams-config": "latest", "@ams-team/block-chart": "latest", "@ams-team/json-stringify": "latest", diff --git a/docs/zh-CN/.vuepress/components/api/icon/list.vue b/docs/zh-CN/.vuepress/components/api/icon/list.vue index aa7a9638..45a25291 100644 --- a/docs/zh-CN/.vuepress/components/api/icon/list.vue +++ b/docs/zh-CN/.vuepress/components/api/icon/list.vue @@ -13,8 +13,12 @@ export default { data() { return { icons: [ - 'user', 'woman', 'man', 'question', 'watcher', 'advocate', 'fold', 'crown', 'heart', 'brick', 'dashboard', - 'portrait', 'brand-equity', 'crowd-manage', 'account-sales', 'help-center', 'data-report', 'customer-operation', 'code' + 'lower-prices', 'petal', 'tag', 'vip-sales', 'caret-left', 'caret-right', 'caret-bottom', 'caret-bottom', 'caret-top', + 'information', 'export', 'data', 'flat', 'top', 'bottom', 'ams', 'vis', 'man', 'woman', 'watcher', 'brick', 'heart', 'advocate', + 'crown', 'code', 'clock', 'car', 'star', 'edit', 'view', 'fixed', 'prohibit', 'balance', 'arrow-up', 'arrow-down', 'required', 'error', + 'circle-plus', 'search', 'document-check', 'check', 'data-sale', 'data-uv', 'data-percent', 'reset', 'big-arrow-up', + 'check2', 'close', 'data-line', 'dashboard', 'portrait', 'brand-equity', 'user-manager', 'account-sales', 'help', 'data-report', + 'customer-operation', 'fold', 'question', 'user', 'mp', 'list-search', 'list-user', 'system-icon' ] } }, diff --git a/docs/zh-CN/.vuepress/components/changelog/logs.js b/docs/zh-CN/.vuepress/components/changelog/logs.js index bdfe3f2f..5454c91c 100644 --- a/docs/zh-CN/.vuepress/components/changelog/logs.js +++ b/docs/zh-CN/.vuepress/components/changelog/logs.js @@ -1,9 +1,22 @@ // 更新日志 export default [ { - version: '0.25.13', - date: '2020.06.05', + version: '0.25.28', + date: '2020.07.29', log: [ + 'feat: unitselect字段增加on.change回调', + 'feat: list区块增加前端排序', + 'feat: field-audio、field-image、field-video支持在props配置before-upload回调', + 'feat: table组件支持tableTop的插槽', + 'feat: list组件,前端分页时,点击排序请求接口', + 'feat: 前端分页时,点击排序触发fieldChange', + 'feat: object增加collapseKeys配置', + 'feat: 字段button增加emitFieldChange配置,可手动触发fieldChange方法', + 'feat: operation添加info支持', + 'feat: 远程搜索组件添加onSuccess和onError的回调方法', + 'fix: table组件添加context参数', + 'feat: 补全list区块的props配置', + 'feat: 内置action的read中,添加tansform配置', 'feat: 内置的action支持配置path/method/successCode/transform', 'feat: resource增加method的配置', 'feat: table组件支持配置data.layout', @@ -13,7 +26,7 @@ export default [ 'feat: block-xlsx@0.8.8,导入的request支持withCredentials、contentType、headers、successCode的配置', 'fix: list组件的列支持配置min-width', 'feat: text-view增加suffix-icon配置', - 'fix: options选项多时的popover交互修改' + 'fix: options选项多时的popover交互修改', ] }, { diff --git a/docs/zh-CN/.vuepress/components/block/tree/block.js b/docs/zh-CN/.vuepress/components/field/tree/block.js similarity index 100% rename from docs/zh-CN/.vuepress/components/block/tree/block.js rename to docs/zh-CN/.vuepress/components/field/tree/block.js diff --git a/docs/zh-CN/.vuepress/components/block/tree/demo.vue b/docs/zh-CN/.vuepress/components/field/tree/demo.vue similarity index 100% rename from docs/zh-CN/.vuepress/components/block/tree/demo.vue rename to docs/zh-CN/.vuepress/components/field/tree/demo.vue diff --git a/docs/zh-CN/.vuepress/config.js b/docs/zh-CN/.vuepress/config.js index cb193725..df7a7ecd 100644 --- a/docs/zh-CN/.vuepress/config.js +++ b/docs/zh-CN/.vuepress/config.js @@ -66,6 +66,7 @@ module.exports = { '', 'resource', 'block', + 'template', 'demo' ] }, @@ -103,7 +104,7 @@ module.exports = { { title: '基础', collapsable: false, - children: ['text','password', 'textarea', 'switch', 'color', 'rate', 'unitselect', 'link', 'button', 'html'] + children: ['text','password', 'textarea', 'switch', 'color', 'rate', 'unitselect', 'link', 'button', 'html', 'tree'] }, { title: '时间', @@ -159,8 +160,7 @@ module.exports = { 'steps', 'card', 'dropdown', - 'popover', - 'tree' + 'popover' ] }, { diff --git a/docs/zh-CN/api/quickstart.md b/docs/zh-CN/api/quickstart.md new file mode 100644 index 00000000..bc95d85c --- /dev/null +++ b/docs/zh-CN/api/quickstart.md @@ -0,0 +1,96 @@ +# 快速起步 + +## 安装 + +### 方式一:通过npm安装(依赖node环境) + +详见[通过npm安装](./npm.md) + +### 方式二:直接用 script 引入 + +> 注意,需要先引入Vue.js element-ui的依赖 + +```html + + + + + + + + + + + +``` + +尝试AMS的最简单的方式是使用[JSRUN上的官方入门Demo](http://jsrun.net/sehKp/edit?utm_source=website)。你可以在浏览器新标签页中打开它,跟着例子学习一些基础用法。 + +## 使用 + +AMS的核心思想是通过[规范数据接口](/api/api.html#read:读取单条数据)的数据结构,再用类JSON的格式配置对应的 `区块` 和 `资源`,即可渲染成有UI和数据交互的前端界面。 + + + + + +### 第一步,注册资源 + +```javascript +ams.resource('demoRes', { // ”demoRes“为资源名 + api: { + prefix: 'https://www.yournana.club/vipshop/', // 接口前缀 + update: 'update', // 更新表单数据,值为更新接口的path,和接口前缀组成最终请求的url + read: 'read', // 读取表单数据,值为读取接口的path + }, + fields: { // 字段 + id: { // “id”为字段名 + type: 'text', // 字段类型 + label: '文本' // 该字段显示在页面的文本标签 + }, + testRate: { + type: 'rate', + label: '评分' + }, + testTextarea: { + type: 'textarea', + label: '评语' + } + } +}) +``` + +### 第二步,注册区块 + +```javascript +ams.block('demo', { // “demo”为区块名 + type: 'form', // 区块类型,“form”代表表单类型 + ctx: 'edit', // 状态,“edit”代表为可编辑 + resource: 'demoRes', // 该区块挂载的资源 + operations: { // 操作 + submit: { // 操作触发的事件名 + type: 'button', // 操作类型 + label: '提交' // 操作按钮显示的文案 + } + }, + events: { // 事件流 + init: '@read', // “read”是内置的读取数据操作 + submit: '@update' // “update”是内置的更新数据操作 + } +}); +``` + +### 第三步,渲染区块 + +```javascript +// 渲染名字为“demo”的区块 +ams.render('demo') +``` + + + + + +我们已经成功完成了第一个AMS应用的配置了,通过简单的配置,不需要写UI和复杂的逻辑代码,就可以搭建出具备了数据读取、数据展示、数据编辑等基本功能的表单页面,接下来开始进入AMS核心概念`资源`的介绍。 + +[下一节:资源](/api/resource.html) diff --git a/docs/zh-CN/api/template.md b/docs/zh-CN/api/template.md new file mode 100644 index 00000000..3bf0b334 --- /dev/null +++ b/docs/zh-CN/api/template.md @@ -0,0 +1,37 @@ +--- +Template: Template 模板 +--- +# 模板(Template) + +若干区块与交互组成、满足某些特定功能的页面及页面的集合,例如:满足某个特定功能场景的增删改查页面,整个页面可以理解为模板,在物料市场中展示了很多模板示例 [>> 详情](/market/) + +## 模板使用 + +第一步,创建一个html文件 + +```js + + + + + 首页 + + + + + + + + + + +``` + +第二步,在市场中选择合适项目的初始化模板,鼠标hover,可以看到“查看配置”的按钮,点开赋值里面的AMS配置,填充到第一步的html对应的注释配置里 + +![market-config](../assets/market-config.png) \ No newline at end of file diff --git a/docs/zh-CN/assets/cli-npm.png b/docs/zh-CN/assets/cli-npm.png new file mode 100644 index 0000000000000000000000000000000000000000..d709ea2304bbb9d8fc9d414bbc635d5e19fb7e94 GIT binary patch literal 10609 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 literal 0 HcmV?d00001 diff --git a/docs/zh-CN/block/list.md b/docs/zh-CN/block/list.md index 7ecf3e23..b77c0d2f 100644 --- a/docs/zh-CN/block/list.md +++ b/docs/zh-CN/block/list.md @@ -55,6 +55,8 @@ List: List 列表 如果没有配置会使用同名 `field` 的 `props.options` 配置,如果都没有filter配置会失效 +若配置`props['pagination']: 'simulate'`的纯前端分页,也支持排序 + diff --git a/docs/zh-CN/block/tree.md b/docs/zh-CN/field/tree.md similarity index 80% rename from docs/zh-CN/block/tree.md rename to docs/zh-CN/field/tree.md index e923d4da..7c8689ae 100644 --- a/docs/zh-CN/block/tree.md +++ b/docs/zh-CN/field/tree.md @@ -6,7 +6,7 @@ Tree: Tree 树形组件 ### 基础用法 - + 更多配置可以查看element-ui中的 [Attributes / props/ 方法 / Events](https://element.eleme.cn/#/zh-CN/component/tree) \ No newline at end of file diff --git a/examples/router/src/ams-config/cases-block/list/list-operations.js b/examples/router/src/ams-config/cases-block/list/list-operations.js index f71e2c3f..20e8e2c6 100644 --- a/examples/router/src/ams-config/cases-block/list/list-operations.js +++ b/examples/router/src/ams-config/cases-block/list/list-operations.js @@ -11,6 +11,14 @@ ams.block('list-operations', { // tableHeightFit: true }, + props: { + // 设置多选列props + 'selection-props': { + width: 100, + align: 'center' + } + }, + // 过滤设置(列表特有) filters: { testCheckbox: { diff --git a/examples/router/src/ams-config/cases-block/list/list-simulate.js b/examples/router/src/ams-config/cases-block/list/list-simulate.js new file mode 100644 index 00000000..77d3824d --- /dev/null +++ b/examples/router/src/ams-config/cases-block/list/list-simulate.js @@ -0,0 +1,49 @@ +import ams from '@ams-team/ams'; +import { prefix } from '@/utils'; + +ams.block('list-simulate', { + ctx: 'view', + type: 'list', + resource: { + api: { + prefix: prefix, + list: 'list' + }, + fields: { + id: { + type: 'textarea', + label: 'ID', + props: { + 'class-name': 'drag-column' + } + }, + testText: { + type: 'text', + label: '店铺' + } + } + }, + props: { + // 阻止列表搜索栏的回车搜索事件 + 'enterkey-search': false, + 'pagination': 'simulate' + }, + sorts: { + id: true, + testText: true + }, + options: { + operationsWidth: '120px' + }, + data: { + list: Array.from(Array(100), (v, k) => ({ + id: k + 1, + testText: `标题${k + 1}` + })), + pageSize: 20, + pageSizes: [10, 20] + }, + events: { + back: '@routerGo:-1' + } +}); diff --git a/examples/router/src/ams-config/cases-field/select.js b/examples/router/src/ams-config/cases-field/select.js index 5770f99b..7acb02d7 100644 --- a/examples/router/src/ams-config/cases-field/select.js +++ b/examples/router/src/ams-config/cases-field/select.js @@ -150,6 +150,12 @@ ams.block('select', { action: `${prefix}tag`, queryKey: 'requiredName', labelKey: 'name', + onSuccess: function(options, res) { + console.log('请求成功后的回调', options, res); + }, + onError: function(options, res) { + console.log('请求失败的回调', options, res); + } } }, singleSelectView: { diff --git a/examples/router/src/ams-config/index.js b/examples/router/src/ams-config/index.js index 261e7199..3752fda7 100644 --- a/examples/router/src/ams-config/index.js +++ b/examples/router/src/ams-config/index.js @@ -47,6 +47,7 @@ import './cases-block/list/list-edit'; import './cases-block/list/list-pagination'; import './cases-block/list/list-drag'; import './cases-block/list/list-field-convert'; +import './cases-block/list/list-simulate'; import './cases-block/calendar'; import './cases-block/dragimage'; import './cases-block/dragimage-updown'; diff --git a/examples/router/src/ams-config/router.js b/examples/router/src/ams-config/router.js index bd289c8f..5bafc8a5 100644 --- a/examples/router/src/ams-config/router.js +++ b/examples/router/src/ams-config/router.js @@ -216,6 +216,11 @@ ams.block('router', { name: '字段处理', path: 'list-field-convert', block: 'list-field-convert' + }, + { + name: '前端分页', + path: 'list-simulate', + block: 'list-simulate' } ] }, diff --git a/package.json b/package.json index d99c4f40..4ebbc7f9 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "vue", "element-ui" ], - "version": "0.25.17", + "version": "0.25.28", "main": "lib/ams.common.js", "unpkg": "lib/ams.js", "scripts": { @@ -21,9 +21,9 @@ "lint": "./node_modules/.bin/eslint --ext vue,js ./", "clean": "rimraf lib && rimraf dist", "build": "node build/bin/prebuild.js && npm run lint && npm run clean && webpack --config build/webpack.conf.js && webpack --config build/webpack.common.js", - "components": "webpack --config build/webpack.component.js", - "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.js", - "update-doc": "cd ./docs && npm run build && cd ../ && cd ./examples/router && npm run build && cd ../../ && node build/bin/update-doc.js" + "components": "webpack --config build/webpack.component.js --libraryTarget commonjs2", + "components-umd": "webpack --config build/webpack.component.js --libraryTarget umd", + "dev": "lerna bootstrap && webpack-dev-server --inline --progress --config build/webpack.dev.js" }, "dependencies": { "@babel/runtime": "^7.4.4", diff --git a/packages/block-image-label/package.json b/packages/block-image-label/package.json index 6aecbd84..7a372799 100644 --- a/packages/block-image-label/package.json +++ b/packages/block-image-label/package.json @@ -1,6 +1,6 @@ { "name": "@ams-team/block-image-label", - "version": "0.1.2", + "version": "0.1.3", "description": "AMS图片打标签", "author": "ams", "main": "lib/block-image-label.js", diff --git a/packages/field-tag/package.json b/packages/field-tag/package.json index 5dc49a38..c41e9888 100644 --- a/packages/field-tag/package.json +++ b/packages/field-tag/package.json @@ -1,6 +1,6 @@ { "name": "@ams-team/field-tag", - "version": "1.2.5", + "version": "1.2.6", "description": "AMS标签", "author": "ams", "main": "lib/field-tag.js", diff --git a/src/ams/configs/alias/field.js b/src/ams/configs/alias/field.js index b0cd09a3..0054a3ff 100644 --- a/src/ams/configs/alias/field.js +++ b/src/ams/configs/alias/field.js @@ -181,6 +181,11 @@ export const SELECT_REMOTE = { optionsCache[cacheKey] = deepExtend(optionsCache[cacheKey] || {}, optionsEntity); } $field.$set($field.field.props, 'options', options); + if (typeof remoteConfig.onSuccess === 'function') { + remoteConfig.onSuccess(options, res); + } + } else if (typeof remoteConfig.onError === 'function') { + remoteConfig.onError(data, res); } nextLockQuery(); } catch (e) { diff --git a/src/ams/mixins/field-button-mixin.js b/src/ams/mixins/field-button-mixin.js index 212258ee..025d73fa 100644 --- a/src/ams/mixins/field-button-mixin.js +++ b/src/ams/mixins/field-button-mixin.js @@ -12,7 +12,11 @@ export default { methods: { emit() { ams.$prevReturn = this.context; - this.$block.emitEvent(this.field.event); + const field = this.field; + if (field.props && field.props.emitFieldChange) { + this.fieldChange(field.props.text || field.label, field, this.path); + } + this.$block.emitEvent(field.event); } } }; diff --git a/src/blocks/block/operations.vue b/src/blocks/block/operations.vue index 46ecceb0..21297a81 100644 --- a/src/blocks/block/operations.vue +++ b/src/blocks/block/operations.vue @@ -5,8 +5,12 @@ :class="operation.props && operation.props.inline === false ? 'el-form-item--block' : ''" v-if="getShowState(operation, context)" :key="operationKey"> + + +
+
+ class="el-form-item__label">{{operation.label}}
+ :width="selectionProps.width || 50" + v-bind="selectionProps" /> + @@ -158,7 +160,7 @@ + + diff --git a/src/fields/unitselect/unitselect-edit.vue b/src/fields/unitselect/unitselect-edit.vue index eb0d641f..6b6846e7 100644 --- a/src/fields/unitselect/unitselect-edit.vue +++ b/src/fields/unitselect/unitselect-edit.vue @@ -48,6 +48,7 @@ export default { val: this.val, unit: this.unit, }; + this.on.change && this.on.change(this.localValue); }, changeUnit(e) { // console.log('changeUnit', e, this.unit) @@ -55,6 +56,7 @@ export default { val: this.val, unit: this.unit, }; + this.on.change && this.on.change(this.localValue); } } }; diff --git a/src/fields/video/video-edit.vue b/src/fields/video/video-edit.vue index 4f6ac6fd..a96640f6 100644 --- a/src/fields/video/video-edit.vue +++ b/src/fields/video/video-edit.vue @@ -23,7 +23,7 @@ export default { mixins: [mixins.fieldEditMixin], methods: { beforeUpload(file) { - return new Promise((resolve, reject) => { + return new Promise(async (resolve, reject) => { if (!this.field.check) { return resolve(); } @@ -33,6 +33,10 @@ export default { this.$message.error('上传视频大小不能超过 ' + (maxSizeInKB / 1024).toFixed(2) + 'MB!'); return reject(); // eslint-disable-line prefer-promise-reject-errors } + const props = this.field.props || {}; + if (typeof props['before-upload'] === 'function') { + await props['before-upload'](file); + } resolve(); }); }, diff --git a/src/index.js b/src/index.js index 6e6d71b5..4ce45c11 100644 --- a/src/index.js +++ b/src/index.js @@ -75,7 +75,7 @@ import icon from './operations/icon'; import field from './operations/field'; import dropdown from './operations/dropdown'; // 版本号 -ams.version = '0.25.17'; +ams.version = '0.25.28'; // 挂载到ams上 ams.mixins = mixins; ams.utils = utils; diff --git a/src/utils/index.js b/src/utils/index.js index 44bff292..c6f02244 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -173,3 +173,61 @@ export function loadJS(url) { document.body.appendChild(script); }); } + +/** + * 排序 + */ +function SortByProps(item1, item2) { + const props = []; + for (let i = 2; i < arguments.length; i++) { + props[i - 2] = arguments[i]; + } + let cps = []; + // 存储排序属性比较结果 + // 如果未指定排序属性,则按照全属性升序排序 + let asc = true; + if (props.length < 1) { + for (const p in item1) { + if (item1[p] > item2[p]) { + cps.push(1); + break; + } else if (item1[p] === item2[p]) { + cps.push(0); + } else { + cps.push(-1); + break; + } + } + } else { + for (let i = 0; i < props.length; i++) { + const prop = props[i]; + for (const o in prop) { + if (Object.prototype.hasOwnProperty.call(prop, o)) { + asc = Boolean(prop[o] === 'ascending'); + if (item1[o] > item2[o]) { + cps.push(asc ? 1 : -1); + break; + } else if (item1[o] === item2[o]) { + cps.push(0); + } else { + cps.push(asc ? -1 : 1); + break; + } + } + } + } + } + + for (let j = 0; j < cps.length; j++) { + if (cps[j] === 1 || cps[j] === -1) { + return cps[j]; + } + } + return 0; +} +export function sortBy(source, propOrders) { + if (Array.isArray(source) && source.length) { + return source.sort((a, b) => SortByProps(a, b, propOrders)); + } + return []; +} \ No newline at end of file