让企业管理更智慧、更快捷

Skip to content
源代码提交(20)
module.exports = {
root: true,
env: {
node: true
},
extends: ["plugin:vue/essential", "eslint:recommended"],
parserOptions: {
ecmaVersion: 2020
},
// 全局变量
globals: {
"_": "writable",
"$": "writable"
},
rules: {
// allow async-await
"generator-star-spacing": "off",
indent: "off", // tab缩进
"eol-last": "off", // 文末空行
"no-multiple-empty-lines": [
// 禁止出现多行空行
"error",
{
max: 1
}
],
"no-new-object": "error", // 禁用 Object 的构造函数
"no-unneeded-ternary": "error", // 禁止可以在有更简单的可替代的表达式时使用三元操作符
"no-whitespace-before-property": "error", // 禁止属性前有空白
"nonblock-statement-body-position": "error", // 强制单个语句的位置
"object-curly-spacing": ["error", "always"], // 强制在花括号中使用一致的空格
semi: "off", // 要求或禁止使用分号代替 ASI
quotes: "off", // 强制使用一致的反勾号、双引号或单引号
"no-tabs": "off", // 禁用 tab
"no-mixed-spaces-and-tabs": "off", // 禁止使用 空格 和 tab 混合缩进
"no-extend-native": "off", // 禁止扩展原生对象
"no-unreachable": "off", // 关闭return后不能有code
"no-undef": "error", // 变量定义,未使用提示
"no-await-in-loop": "off", // 禁止在循环中写awit,因为无法同时发送多个异步请求
"no-compare-neg-zero": "error", // 禁止与负0比较
"no-cond-assign": ["error", "except-parens"], // 禁止在if, for, while 里使用赋值语句,除非被括号包起来了
"no-console": "off", // 禁止使用console
"no-dupe-args": "error", // 禁止在函数参数中出现重复名称的参数
"no-dupe-keys": "error", // 禁止在对象字面量中出现重复名称的键名
"no-duplicate-case": "error", // 禁止在 switch 语句中出现重复测试表达式的 case
"space-before-function-paren": "off", // 函数括号前空格
"spaced-comment": "error", // 要求或禁止在注释前有空白
"wrap-regex": "error", // 要求正则表达式被包裹起来
// "brace-style": ["error", "1tbs"], //方法大括号风格要求
"no-empty": [
// 禁止出现空代码块
"error",
{
allowEmptyCatch: true
}
],
"no-extra-boolean-cast": "error", // 禁止不必要的布尔转换
"no-empty-character-class": "error", // 禁止在正则表达式中使用空的字符集 []
"no-ex-assign": "error", // 禁止将 catch 的第一个参数 error 重新赋值
"no-extra-semi": "error", // @fixable 禁止出现多于的分号
"no-inner-declarations": [
// 禁止在 if 内出现函数申明或使用 var 定义变量
"error",
"both"
],
"no-invalid-regexp": "error", // 禁止出现非法的正则表达式
// "no-new": "error", // 禁止直接 new 一个类而不赋值
"no-new-wrappers": "error", // 禁止使用 new 来生成 String, Number 或 Boolean
"no-script-url": "error", // 禁止出现 location.href = 'javascript:void(0)';
"no-self-assign": "error", // 禁止将自己赋值给自己
"no-delete-var": "error", // 禁止使用 delete
"no-unused-vars": [
// 定义过的变量必须使用
"error",
{
vars: "all",
args: "none",
caughtErrors: "none",
ignoreRestSiblings: true
}
],
"no-use-before-define": [
// 变量必须先定义后使用
"error",
{
functions: false,
classes: false,
variables: false
}
],
"arrow-spacing": [
// @fixable 箭头函数的箭头前后必须有空格
"error",
{
before: true,
after: true
}
],
"no-dupe-class-members": "error", // 禁止类成员中出现重复的名称
"no-const-assign": "error", // 禁止对使用 const 定义的常量重新赋值
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "off"
// "max-lines": [ //文件强制最大行数
// "error",
// {
// max: 1500,
// skipBlankLines: true, //忽略空白行
// skipComments: true //忽略注释
// }
// ]
}
};
root: true,
env: {
node: true
},
extends: ["plugin:vue/essential", "eslint:recommended", "plugin:storybook/recommended"],
parserOptions: {
ecmaVersion: 2020,
parser: '@babel/eslint-parser'
},
// 全局变量
globals: {
"_": "writable",
"$": "writable"
},
rules: {
// allow async-await
"generator-star-spacing": "off",
indent: "off",
// tab缩进
"eol-last": "off",
// 文末空行
"no-multiple-empty-lines": [// 禁止出现多行空行
"error", {
max: 1
}],
"no-new-object": "error",
// 禁用 Object 的构造函数
"no-unneeded-ternary": "error",
// 禁止可以在有更简单的可替代的表达式时使用三元操作符
"no-whitespace-before-property": "error",
// 禁止属性前有空白
"nonblock-statement-body-position": "error",
// 强制单个语句的位置
"object-curly-spacing": ["error", "always"],
// 强制在花括号中使用一致的空格
semi: "off",
// 要求或禁止使用分号代替 ASI
quotes: "off",
// 强制使用一致的反勾号、双引号或单引号
"no-tabs": "off",
// 禁用 tab
"no-mixed-spaces-and-tabs": "off",
// 禁止使用 空格 和 tab 混合缩进
"no-extend-native": "off",
// 禁止扩展原生对象
"no-unreachable": "off",
// 关闭return后不能有code
"no-undef": "error",
// 变量定义,未使用提示
"no-await-in-loop": "off",
// 禁止在循环中写awit,因为无法同时发送多个异步请求
"no-compare-neg-zero": "error",
// 禁止与负0比较
"no-cond-assign": ["error", "except-parens"],
// 禁止在if, for, while 里使用赋值语句,除非被括号包起来了
"no-console": "off",
// 禁止使用console
"no-dupe-args": "error",
// 禁止在函数参数中出现重复名称的参数
"no-dupe-keys": "error",
// 禁止在对象字面量中出现重复名称的键名
"no-duplicate-case": "error",
// 禁止在 switch 语句中出现重复测试表达式的 case
"space-before-function-paren": "off",
// 函数括号前空格
"spaced-comment": "error",
// 要求或禁止在注释前有空白
"wrap-regex": "error",
// 要求正则表达式被包裹起来
// "brace-style": ["error", "1tbs"], //方法大括号风格要求
"no-empty": [// 禁止出现空代码块
"error", {
allowEmptyCatch: true
}],
"no-extra-boolean-cast": "error",
// 禁止不必要的布尔转换
"no-empty-character-class": "error",
// 禁止在正则表达式中使用空的字符集 []
"no-ex-assign": "error",
// 禁止将 catch 的第一个参数 error 重新赋值
"no-extra-semi": "error",
// @fixable 禁止出现多于的分号
"no-inner-declarations": [// 禁止在 if 内出现函数申明或使用 var 定义变量
"error", "both"],
"no-invalid-regexp": "error",
// 禁止出现非法的正则表达式
// "no-new": "error", // 禁止直接 new 一个类而不赋值
"no-new-wrappers": "error",
// 禁止使用 new 来生成 String, Number 或 Boolean
"no-script-url": "error",
// 禁止出现 location.href = 'javascript:void(0)';
"no-self-assign": "error",
// 禁止将自己赋值给自己
"no-delete-var": "error",
// 禁止使用 delete
"no-unused-vars": [// 定义过的变量必须使用
"error", {
vars: "all",
args: "none",
caughtErrors: "none",
ignoreRestSiblings: true
}],
"no-use-before-define": [// 变量必须先定义后使用
"error", {
functions: false,
classes: false,
variables: false
}],
"arrow-spacing": [// @fixable 箭头函数的箭头前后必须有空格
"error", {
before: true,
after: true
}],
"no-dupe-class-members": "error",
// 禁止类成员中出现重复的名称
"no-const-assign": "error",
// 禁止对使用 const 定义的常量重新赋值
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "off" // "max-lines": [ //文件强制最大行数
// "error",
// {
// max: 1500,
// skipBlankLines: true, //忽略空白行
// skipComments: true //忽略注释
// }
// ]
}
};
\ No newline at end of file
......@@ -6,8 +6,8 @@ before_script:
- npm install
stages:
- package
# - deploy
- package
- deploy
job:npm-publish:
stage: package
......@@ -34,17 +34,17 @@ job:npm-publish:
- npm publish
- echo "job:deploy end..."
# job:web-deploy:
# stage: deploy
# cache:
# key: node_modules_cache
# tags:
# - deploy
# only:
# - tags
# script:
# - echo "job:web-deploy start..."
# - npm run build-storybook
# - echo "Deploy to dev.enviroment(211.149.204.108)..."
# - scp -r -P 22000 storybook-static leadway@211.149.204.108:/home/dockers/web-ui-component-document/www
# - echo "job:web-deploy end..."
\ No newline at end of file
job:web-deploy:
stage: deploy
cache:
key: node_modules_cache
tags:
- deploy
only:
- tags
script:
- echo "job:web-deploy start..."
- npm run build-storybook
- echo "Deploy to dev.enviroment(211.149.204.108)..."
- scp -r -P 22000 storybook-static leadway@211.149.204.108:/home/dockers/web-ui-component-document/www
- echo "job:web-deploy end..."
\ No newline at end of file
module.exports = {
"stories": [
"../src//**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
core: {
builder: "webpack5",
},
stories: ["../src/**/*.stories.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
addons: [
"@storybook/addon-docs",
"@storybook/addon-essentials",
"@storybook/addon-viewport",
"@storybook/addon-notes",
"@storybook/addon-links",
// "@storybook/addon-actions/register",
// "@storybook/addon-viewport",
// "@storybook/addon-controls",
"@storybook/addon-storysource",
"@storybook/addon-actions",
"@storybook/addon-a11y",
"@storybook/addon-knobs"
// "@storybook/addon-actions",
"@storybook/addon-a11y"
],
// previewHead: (head) => (`
// ${head}
// <script src="//unpkg.com/echarts"></script>
// `)
}
};
......@@ -11,60 +11,56 @@ module.exports = ({ config, mode }) => {
config.plugins.push(
new webpack.ProvidePlugin({
_: "underscore",
underscore: "underscore"
underscore: "underscore",
})
);
config.module.rules.push(
{
test: /\.css$/,
loaders: [
test: /\.css$/i,
use: [
{
loader: "postcss-loader",
options: {
sourceMap: true,
config: {
path: "./.storybook/",
postcssOptions: {
config: "./.storybook/",
},
},
},
],
include: path.resolve(__dirname, "../src/"),
},
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
include: path.resolve(__dirname, '../src'),
},
{
test: /\.less$/,
use: [{
loader: 'style-loader'
}, {
loader: 'css-loader'
}, {
loader: 'less-loader',
options: {
lessOptions: {
modifyVars: {
'primary-color': '#a24689',
'success-color': '#67C23A',
'warning-color': '#E6A23C',
'error-color': '#F56C6C',
},
javascriptEnabled: true,
}
}
}]
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
},
{
loader: "sass-loader",
},
],
include: path.resolve(__dirname, "../src"),
},
{
test: /\.stories\.js?$/,
loaders: [require.resolve("@storybook/source-loader")],
use: [require.resolve("@storybook/source-loader")],
include: [path.resolve(__dirname, "../src")],
enforce: "pre",
},
{
test: /\.(png|jpg|gif|mdx|svg)$/,
use: [
{
loader: "file-loader",
options: {},
},
],
}
);
return config;
};
## [0.1.43](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.41...v0.1.43) (2021-12-30)
# [1.0.0](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.42...v1.0.0) (2022-03-04)
### Features
* 更新 UI 库依赖 webpack@5,tailwindcss@2,storybook@6.4 ([0e93ea4](http://git.leadwaycloud.com/package/lwc-ui-components/commits/0e93ea48195be7f2bccf45256b192ee3eb382e44))
* 新增组件 lwc-data-display-detail-second-header ([8232d71](http://git.leadwaycloud.com/package/lwc-ui-components/commits/8232d71fafe8817aa68cf22e2ed89ebf0935733a))
* 新增table自定义筛选器 ([27c3a82](http://git.leadwaycloud.com/package/lwc-ui-components/commits/27c3a8261fe55476cd18e443db504f3060f8c22e))
* 增加table组件翻页/搜索请求的loading效果 ([439ef2e](http://git.leadwaycloud.com/package/lwc-ui-components/commits/439ef2ece6be592ea2add21b70f4f5e5ccb2a811))
* lwc-dialog-form 组件支持属性 loading ([3d5f605](http://git.leadwaycloud.com/package/lwc-ui-components/commits/3d5f605a18295e3b4bd751bf9077bc77bb575306)), closes [#55](http://git.leadwaycloud.com/package/lwc-ui-components/issues/55)
* lwc-layout-form-basic 组件支持 header-title 插槽,支持自定义标题内容 ([e86c3e4](http://git.leadwaycloud.com/package/lwc-ui-components/commits/e86c3e4d2468030aa19e0e80fb6d6997c5c62744))
## [0.1.42](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.41...v0.1.42) (2021-12-21)
### Bug Fixes
* 修复table不使用代理情况请求数据判断问题 ([5bac8b5](http://git.leadwaycloud.com/package/lwc-ui-components/commits/5bac8b50ea87d02caa084b32ad3d37548f241be0))
* 修复table组件formConfig传值为null时代码报错影响正常功能错误 ([ab4dc55](http://git.leadwaycloud.com/package/lwc-ui-components/commits/ab4dc5569b98272c182a04aea466c6bb56115d8a))
### Features
* 优化 dashboard, chart 组件,增加 shadow 属性 ([03d403c](http://git.leadwaycloud.com/package/lwc-ui-components/commits/03d403cde263ae51a1fae2a2764b38d2431ce7c0))
## [0.1.41](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.40...v0.1.41) (2021-12-17)
### Bug Fixes
......@@ -6,16 +35,13 @@
* 修复报表刷新按钮无移入效果 ([f376949](http://git.leadwaycloud.com/package/lwc-ui-components/commits/f376949d3f624685608f3a4364838f428135fe50))
* 修复lwc-upload-file上传错误loading未关闭的错误 ([9746800](http://git.leadwaycloud.com/package/lwc-ui-components/commits/974680032033f4d847268355ae76cdde3cce8987))
* 修复quill富文本编辑器自定义按钮图标不显示问题 ([85ca48d](http://git.leadwaycloud.com/package/lwc-ui-components/commits/85ca48d383ec5ff4162794f3d12dc37dc6ab2d0c))
* 修复table不使用代理情况请求数据判断问题 ([5bac8b5](http://git.leadwaycloud.com/package/lwc-ui-components/commits/5bac8b50ea87d02caa084b32ad3d37548f241be0))
* 修复table传值data无proxyConfig配置报错消息,修复上传组件accept等属性未生效问题 ([ac56faa](http://git.leadwaycloud.com/package/lwc-ui-components/commits/ac56faa5c9f0d0496026b8c5d5bd4fea39fc2d31))
* 修复table组件formConfig传值为null时代码报错影响正常功能错误 ([ab4dc55](http://git.leadwaycloud.com/package/lwc-ui-components/commits/ab4dc5569b98272c182a04aea466c6bb56115d8a))
### Features
* 富文本组件新增加载图片地址按钮功能 ([928ee2e](http://git.leadwaycloud.com/package/lwc-ui-components/commits/928ee2eb0ad2cfaf2088626fa29013e2b7703c03))
* 新增lwc-table-basic传值data,loadData等方法在配置分页无代理情况下默认加载分页数据 ([9f448ba](http://git.leadwaycloud.com/package/lwc-ui-components/commits/9f448ba119ddcc4427cce0d5cc5595f08755da7b))
* 新增table自定义筛选器 ([27c3a82](http://git.leadwaycloud.com/package/lwc-ui-components/commits/27c3a8261fe55476cd18e443db504f3060f8c22e))
* 增加审核弹窗和表单弹窗的loading ([a51d288](http://git.leadwaycloud.com/package/lwc-ui-components/commits/a51d28879e9c302e4cf9781ec97dee4d4bfcbcb3))
* add publishConfig ([fcb96bb](http://git.leadwaycloud.com/package/lwc-ui-components/commits/fcb96bb001b24688a3e3c09c2cbec4a2564127cb))
......@@ -61,37 +87,41 @@
### Bug Fixes
* 修复上传附件组件上传完毕关闭弹窗再次打开弹窗附件未清空的错误 ([513033d](http://git.leadwaycloud.com/package/lwc-ui-components/commits/513033d499787028aaaf18ceefc25e1ece3c4735))
* 修复hoc模板events/props未传值报错 ([17a5c08](http://git.leadwaycloud.com/package/lwc-ui-components/commits/17a5c08cdff86914d9424e608ddcf596bec752ea))
### Features
* 移除 ant-design-vue 库,涉及到的组件全部替换为 element-ui, 减小运行/打包体积 ([3015695](http://git.leadwaycloud.com/package/lwc-ui-components/commits/30156958c9d9c7050d95fe284857fc9764918fb2))
* lwc-table-basic 组件新增支持 visible column 自定义列设置显示 ([f454abd](http://git.leadwaycloud.com/package/lwc-ui-components/commits/f454abd45e2df924161b2f011011fc7cfa38264f))
* lwc-tags-basic 组件新增两种type: main、friendly,tailwindcss 新增对应颜色配置 ([cbc9977](http://git.leadwaycloud.com/package/lwc-ui-components/commits/cbc9977a24d599c3d57a7eb43abcc4a2b7bc5403))
## [0.1.35](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.34...v0.1.35) (2021-07-28)
## [0.1.36](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.35...v0.1.36) (2021-08-02)
### Bug Fixes
* 修复上传附件组件文件为链接时下载文件错误 新增按钮btnConfig显示隐藏按钮 ([f282c66](http://git.leadwaycloud.com/package/lwc-ui-components/commits/f282c663d4b5704dd9f36fa123466d816e57e5a4))
* 修复上传附件组件type=action拿不到返回 ([d0bdf12](http://git.leadwaycloud.com/package/lwc-ui-components/commits/d0bdf12bddd11fa34346ee992b3b5f1aa1f8922c))
* 修复下拉select组件value值为空时需点击两次展开下拉问题 ([1b80694](http://git.leadwaycloud.com/package/lwc-ui-components/commits/1b80694135ec03f398fdf13a881faf9a2602e8d8))
* 修复lwc-data-display-detail-header 组件 imageConfig 判断问题 ([a6283e7](http://git.leadwaycloud.com/package/lwc-ui-components/commits/a6283e702b622c046d2fa884b6213847ef184dba)), closes [#46](http://git.leadwaycloud.com/package/lwc-ui-components/issues/46)
* 修复上传附件组件上传完毕关闭弹窗再次打开弹窗附件未清空的错误 ([513033d](http://git.leadwaycloud.com/package/lwc-ui-components/commits/513033d499787028aaaf18ceefc25e1ece3c4735))
### Features
* lwc-table-basic 组件新增支持 visible column 自定义列设置显示 ([f454abd](http://git.leadwaycloud.com/package/lwc-ui-components/commits/f454abd45e2df924161b2f011011fc7cfa38264f))
## [0.1.34](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.33...v0.1.34) (2021-07-22)
## [0.1.35](http://git.leadwaycloud.com/package/lwc-ui-components/compare/v0.1.34...v0.1.35) (2021-07-28)
### Bug Fixes
* 修复 lwc-data-display-detail-header 传入 image src 为 null 或空字符串时默认图片加载问题 ([681ea0c](http://git.leadwaycloud.com/package/lwc-ui-components/commits/681ea0cc6edbe15ce6b4bd8536557d7cf37d597c)), closes [#44](http://git.leadwaycloud.com/package/lwc-ui-components/issues/44)
* 修复部分 card 组件文本过长显示问题 ([85d5189](http://git.leadwaycloud.com/package/lwc-ui-components/commits/85d5189c18b751d113074ce280cc94d3fab33587)), closes [#2](http://git.leadwaycloud.com/package/lwc-ui-components/issues/2)
* 修复上传附件组件文件为链接时下载文件错误 新增按钮btnConfig显示隐藏按钮 ([f282c66](http://git.leadwaycloud.com/package/lwc-ui-components/commits/f282c663d4b5704dd9f36fa123466d816e57e5a4))
* 修复上传附件组件type=action拿不到返回 ([d0bdf12](http://git.leadwaycloud.com/package/lwc-ui-components/commits/d0bdf12bddd11fa34346ee992b3b5f1aa1f8922c))
* 修复下拉select组件value值为空时需点击两次展开下拉问题 ([1b80694](http://git.leadwaycloud.com/package/lwc-ui-components/commits/1b80694135ec03f398fdf13a881faf9a2602e8d8))
* 修复lwc-data-display-detail-header 组件 imageConfig 判断问题 ([a6283e7](http://git.leadwaycloud.com/package/lwc-ui-components/commits/a6283e702b622c046d2fa884b6213847ef184dba)), closes [#46](http://git.leadwaycloud.com/package/lwc-ui-components/issues/46)
* 修复select组件initQuery为false时value改变重复请求data问题 ([85449f3](http://git.leadwaycloud.com/package/lwc-ui-components/commits/85449f3168a8fc6e425f46ff0b5c565083fd1b89))
* hoc增加field字段适配组件默认值自定义 ([9e80790](http://git.leadwaycloud.com/package/lwc-ui-components/commits/9e807907b2c910083837397edafb63988dde38a5)), closes [#42](http://git.leadwaycloud.com/package/lwc-ui-components/issues/42)
* lwc-table-basic 优化导出图标 ([d232a12](http://git.leadwaycloud.com/package/lwc-ui-components/commits/d232a12e41afd3367a311758dd9df225fb5d0376)), closes [#45](http://git.leadwaycloud.com/package/lwc-ui-components/issues/45)
......
var path = require("path");
var nodeExternals = require("webpack-node-externals");
var Components = require("../components.json");
var externals = {};
Object.keys(Components).forEach(function (key) {
......
......@@ -16,7 +16,7 @@ const getEntryComponents = function() {
const webpackConfig = {
mode: "production",
entry: getEntryComponents(),
entry: getEntryComponents(), // 打包对应组件入口
output: {
path: path.resolve(process.cwd(), "./lib"),
publicPath: "/dist/",
......
......@@ -5,17 +5,17 @@ const VueLoaderPlugin = require("vue-loader/lib/plugin");
const TerserPlugin = require("terser-webpack-plugin");
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const config = require("./config");
const webpackConfig = require("./config");
module.exports = {
mode: "production",
entry: {
app: ["./src/index.js"],
app: "./src/index.js",
},
output: {
path: path.resolve(process.cwd(), "./lib"),
path: path.resolve(process.cwd(), "./lib"), // 输出位置
publicPath: "/dist/",
filename: "index.js",
filename: "index.js", // 文件名
chunkFilename: "[id].js",
libraryTarget: "umd",
libraryExport: "default",
......@@ -25,11 +25,10 @@ module.exports = {
},
resolve: {
extensions: [".js", ".vue", ".json", ".scss", ".css"],
alias: config.alias,
alias: webpackConfig.alias,
},
externals: {
vue: config.vue,
'echarts': 'echarts'
vue: webpackConfig.vue,
},
optimization: {
minimizer: [
......@@ -52,36 +51,41 @@ module.exports = {
rules: [
{
test: /\.(jsx?|babel|es6)$/,
include: path.resolve(__dirname, "../src"),
exclude: config.jsexclude,
loader: "babel-loader",
include: [path.resolve(__dirname, "../src")],
exclude: [webpackConfig.jsexclude],
use: [{
loader: "babel-loader"
}]
},
{
test: /\.vue$/,
loader: "vue-loader",
options: {
compilerOptions: {
preserveWhitespace: false,
use: [{
loader: "vue-loader",
options: {
compilerOptions: {
preserveWhitespace: false,
},
},
},
}]
},
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
// use: ["css-loader"],
},
{
test: /\.scss$/,
use: ["style-loader", "css-loader", "sass-loader"],
include: path.resolve(__dirname, "../src"),
include: [path.resolve(__dirname, "../src")],
},
{
test: /\.(svg|otf|ttf|woff2?|eot|gif|png|jpe?g)(\?\S*)?$/,
loader: "url-loader",
options: {
limit: 10000,
name: path.posix.join("static", "[name].[hash:7].[ext]"),
},
use: [{
loader: "url-loader",
options: {
limit: 10000,
name: path.posix.join("static", "[name].[hash:7].[ext]"),
},
}]
},
],
},
......
此差异已折叠。
此差异已折叠。
{
"name": "@package/lwc-ui-components",
"version": "0.1.44",
"version": "1.0.0",
"private": false,
"license": "UNLICENSED",
"description": "立威云UI组件库",
"author": "",
"scripts": {
"build": "npm run clean && npm run build-components-json && npm run build-entry && npm run build-conf && npm run build-component && npm run build-common",
"lint": "vue-cli-service lint",
"lint:fix": "vue-cli-service lint --fix",
"stylelint": "npx stylelint './src/**/*.{vue,css,sss,less,scss,sass}'",
"stylelint:fix": "npx stylelint './src/**/*.{vue,css,sss,less,scss,sass}' --fix",
"storybook": "start-storybook -p 6006",
"build-storybook": "build-storybook -c .storybook",
"storybook-docs": "start-storybook --docs",
"build-components-json": "node build/components.js > components.json",
"build-component": "npx webpack --mode production --config build/webpack.component.js",
"build-common": "npx webpack --mode production --config build/webpack.common.js",
"build-component": "npx webpack --mode production --config build/webpack.component.js",
"build-components-json": "node build/components.js > components.json",
"build-conf": "npx webpack --mode production --config build/webpack.conf.js",
"build-theme": "gulp build --gulpfile src/theme-chalk/gulpfile.js",
"build-entry": "node build/bin/build-entry.js",
"build": "npm run clean && npm run build-components-json && npm run build-entry && npm run build-conf && npm run build-component && npm run build-common",
"dll": "webpack -p --progress --config ./webpack.dll.config.js",
"build-storybook": "build-storybook -c .storybook",
"build-theme": "gulp build --gulpfile src/theme-chalk/gulpfile.js",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
"clean": "rimraf lib",
"dll": "webpack -p --progress --config ./webpack.dll.config.js",
"lint:fix": "vue-cli-service lint --fix",
"new": "node build/bin/new.js",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
"storybook": "start-storybook -p 6006",
"storybook-docs": "start-storybook --docs",
"stylelint": "npx stylelint './src/**/*.{vue,css,sss,less,scss,sass}'",
"stylelint:fix": "npx stylelint './src/**/*.{vue,css,sss,less,scss,sass}' --fix"
},
"main": "lib/lwc-ui-components.common.js",
"style": "lib/app.css",
"files": [
"lib",
"src"
......@@ -33,7 +33,7 @@
"@mdx-js/vue-loader": "^1.6.22",
"@vue/composition-api": "^1.0.0-beta.19",
"clipboard": "^2.0.6",
"core-js": "^3.6.5",
"core-js": "^3.21.1",
"dayjs": "^1.9.6",
"echarts": "^5.2.1",
"jsbarcode": "^3.11.3",
......@@ -44,33 +44,43 @@
"vue": "^2.6.11",
"vue-cropper": "^0.5.6",
"vue-i18n": "^8.22.1",
"vue-quill-editor": "^3.0.6"
"vue-quill-editor": "^3.0.6",
"element-ui": "^2.15.6",
"tailwindcss": "~2.2.19",
"vxe-table": "~3.5.1",
"vxe-table-plugin-element": "^1.11.2",
"xe-utils": "^3.1.13",
"lodash": "^4.17.20",
"@package/icon-park": "^1.2.5"
},
"devDependencies": {
"@babel/core": "^7.12.3",
"@package/icon-park": "^1.2.5",
"@storybook/addon-a11y": "^6.1.21",
"@storybook/addon-actions": "^6.1.21",
"@storybook/addon-essentials": "^6.1.21",
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@storybook/addon-docs": "^6.5.0-alpha.45",
"@storybook/addon-a11y": "^6.5.0-alpha.45",
"@storybook/addon-actions": "^6.5.0-alpha.45",
"@storybook/addon-essentials": "^6.5.0-alpha.45",
"@storybook/addon-knobs": "^6.1.21",
"@storybook/addon-links": "^6.1.21",
"@storybook/addon-controls": "^6.5.0-alpha.45",
"@storybook/addon-links": "^6.5.0-alpha.45",
"@storybook/addon-notes": "^6.0.0-alpha.6",
"@storybook/addon-storysource": "^6.1.21",
"@storybook/addon-viewport": "^6.1.21",
"@storybook/vue": "^6.1.21",
"@vue/cli-plugin-babel": "^4.5.0",
"@vue/cli-plugin-eslint": "^4.5.0",
"@vue/cli-service": "^4.5.0",
"babel-eslint": "^10.1.0",
"@storybook/addon-storysource": "^6.5.0-alpha.45",
"@storybook/addon-viewport": "^6.5.0-alpha.45",
"@storybook/builder-webpack5": "^6.5.0-alpha.45",
"@storybook/manager-webpack5": "^6.5.0-alpha.45",
"@storybook/vue": "^6.5.0-alpha.45",
"@vue/cli-plugin-babel": "~5.0.1",
"@vue/cli-plugin-eslint": "~5.0.1",
"@vue/cli-service": "~5.0.1",
"babel-loader": "^8.1.0",
"babel-plugin-import": "^1.13.1",
"chalk": "^4.1.0",
"clean-webpack-plugin": "^3.0.0",
"css-loader": "^5.0.0",
"cz-conventional-changelog": "^3.3.0",
"element-ui": "^2.15.6",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"eslint": "^7.32.0",
"eslint-plugin-storybook": "^0.5.7",
"eslint-plugin-vue": "^8.0.3",
"figlet": "^1.5.0",
"file-loader": "^6.2.0",
"file-save": "^0.2.0",
......@@ -79,19 +89,19 @@
"json-templater": "^1.2.0",
"less": "^3.12.2",
"less-loader": "^7.0.2",
"lodash": "^4.17.20",
"mini-css-extract-plugin": "0.9.0",
"mini-css-extract-plugin": "~2.6.0",
"mockjs": "^1.1.0",
"moment": "^2.29.1",
"node-sass": "^4.14.1",
"node-sass": "6.0.1",
"postcss": "^8.1.2",
"postcss-cli": "^8.1.0",
"postcss-import": "^12.0.1",
"postcss-loader": "^6.2.1",
"progress-bar-webpack-plugin": "^2.1.0",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-is": "^16.13.1",
"sass-loader": "^10.0.3",
"sass-loader": "10.2.0",
"sass-resources-loader": "^2.1.1",
"style-loader": "^2.0.0",
"stylelint": "^13.8.0",
......@@ -99,28 +109,22 @@
"svelte": "^3.29.0",
"svelte-loader": "^2.13.6",
"svelte-preprocess": "^4.5.1",
"tailwindcss": "^1.9.4",
"url-loader": "^4.1.1",
"validate-commit-msg": "^2.14.0",
"vue-loader": "^15.9.3",
"vue-loader": "~15.9.3",
"vue-template-compiler": "^2.6.11",
"vxe-table": "^3.4.12",
"vxe-table-plugin-element": "^1.11.2",
"webpack": "4.44.2",
"webpack-cli": "3.0.8",
"webpack-node-externals": "1.7.2",
"xe-utils": "^3.1.13"
"webpack": "~5.69.1",
"webpack-cli": "^4.9.2",
"webpack-node-externals": "~2.5.0"
},
"resolutions": {
"@storybook/vue/webpack": "~5.69.1"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
],
"husky": {
"hooks": {
"commit-msg": "validate-commit-msg"
}
},
"config": {
"validate-commit-msg": {
"types": [
......@@ -155,14 +159,19 @@
"path": "./node_modules/cz-conventional-changelog"
}
},
"description": "## 组件库开发 ```shell yarn install ```",
"repository": {
"type": "git",
"url": "http://git.leadwaycloud.com/package/lwc-ui-components.git"
"husky": {
"hooks": {
"commit-msg": "validate-commit-msg"
}
},
"keywords": [],
"license": "UNLICENSED",
"publishConfig": {
"registry": "http://git.leadwaycloud.com/api/v4/projects/180/packages/npm/"
},
"keywords": [],
"author": ""
"repository": {
"type": "git",
"url": "http://git.leadwaycloud.com/package/lwc-ui-components.git"
},
"style": "lib/app.css"
}
......@@ -18,7 +18,11 @@ function firstUpperCase(str) {
}
function firstLowerCase(str) {
return str.replace(str[0], str[0].toLowerCase());
if (str) {
return str.replace(str[0], str[0].toLowerCase());
} else {
return ''
}
}
/**
......
......@@ -47,6 +47,7 @@ import LwcDataDisplayDescriptions from './stories/data-display/descriptions/inde
import LwcDataDisplayDetailContentItem from './stories/data-display/detail-content-item/index.js';
import LwcDataDisplayDetailContentItemList from './stories/data-display/detail-content-item-list/index.js';
import LwcDataDisplayDetailHeader from './stories/data-display/detail-header/index.js';
import LwcDataDisplayDetailSecondHeader from './stories/data-display/detail-second-header/index.js';
import LwcDataDisplayErrorCode from './stories/data-display/error-code/index.js';
import LwcDataDisplayIconDescription from './stories/data-display/icon-description/index.js';
import LwcDataDisplayResult from './stories/data-display/result/index.js';
......@@ -136,6 +137,7 @@ const components = [
LwcDataDisplayDetailContentItem,
LwcDataDisplayDetailContentItemList,
LwcDataDisplayDetailHeader,
LwcDataDisplayDetailSecondHeader,
LwcDataDisplayErrorCode,
LwcDataDisplayIconDescription,
LwcDataDisplayResult,
......@@ -203,7 +205,7 @@ if (typeof window !== 'undefined' && window.Vue) {
}
export default {
version: '0.1.43',
version: '1.0.0',
install,
LwcBasicButton,
LwcBasicButtonIcon,
......@@ -252,6 +254,7 @@ export default {
LwcDataDisplayDetailContentItem,
LwcDataDisplayDetailContentItemList,
LwcDataDisplayDetailHeader,
LwcDataDisplayDetailSecondHeader,
LwcDataDisplayErrorCode,
LwcDataDisplayIconDescription,
LwcDataDisplayResult,
......
......@@ -108,7 +108,7 @@
<el-input type="text" v-model="complexConfig.option.data[0].value" placeholder="支持回车筛选" @input="changeOptionEvent" @change="searchEvents" v-if="complexConfig.type === 'input'"></el-input>
<el-date-picker
v-else
class="w-full"
:style="{width: '100%'}"
:value="complexConfig.option.data[0].value"
:type="complexConfig.type"
placeholder="选择日期"
......@@ -205,6 +205,7 @@ export default {
this.complexConfig.condition = "equal"
this.complexConfig.conditionLabel = "等于"
}
// console.log("complexConfig", complexConfig)
}
},
sortTable(type) {
......
......@@ -25,9 +25,21 @@ export default {
option.data = ""
},
// 筛选方法
filterMethod ({ option, row, column }) {
filterMethod (value) {
const { option, row, column } = value
const { data } = option
const cellValue = XEUtils.get(row, column.property)
let cellValue = XEUtils.get(row, column.property)
let { filterRender, formatter } = column
if(filterRender?.props?.filterConfig?.formatter) {
let formatterMethod = filterRender?.props?.filterConfig?.formatterMethod
if(formatterMethod) {
cellValue = formatterMethod(value)
} else {
if(formatter) {
cellValue = formatter(value)
}
}
}
if (cellValue) {
if(XEUtils.isArray(data)) {
let filterState = true
......
......@@ -8,6 +8,21 @@
`新特性`
`非兼容性更新`
---
### **v1.0.0 20220304**
#### 新增
- 新增组件 lwc-data-display-detail-second-header
- 新增 table 自定义筛选器
- 新增 table 组件翻页/搜索请求的loading效果
- lwc-dialog-form 组件支持属性 loading
- lwc-layout-form-basic 组件支持 header-title 插槽,支持自定义标题内容
#### 优化
- 优化 lwc-data-display-descriptions 组件样式
---
### **v0.1.44 20211231**
......
<template>
<el-row class="lwc-dashboard-four-block-default_container" :gutter="24">
<el-col :span="6" v-for="(item, index) in data" :key="`four-block-default-${index}`">
<el-card class="rounded-none flex flex-col justify-center items-center w-full cursor-pointer" :shadow="shadow">
<el-row class="lwc-dashboard-four-block-default_container h-full" :gutter="24">
<el-col class="h-full" :span="6" v-for="(item, index) in data" :key="`four-block-default-${index}`">
<el-card class="rounded-none flex flex-col justify-center items-center w-full cursor-pointer h-full" :shadow="shadow">
<div class="text-center text-xl text-color-secondary">{{ item.label }}</div>
<div class="text-center text-3xl font-bold">{{ item.value }}</div>
</el-card>
......
......@@ -73,7 +73,7 @@ export default {
let slots = [...renderItems(h, this, data, items)];
if (title) slots.push(h('div', {
slot: 'title'
}, [renderContentItemTitle(h, { title })]));
}, [renderContentItemTitle(h, { title, className: 'mb-0' })]));
return h(
"el-descriptions",
......
import XEUtils from "xe-utils";
import renderHoc from '../../../../renders/hoc';
function renderButtonList (h, _vm, buttons = []) {
let contentVNs = []
if(buttons && buttons.length > 0) {
import renderHoc from "../../../../renders/hoc";
function renderButtonList(h, _vm, buttons = []) {
let contentVNs = [];
if (buttons && buttons.length > 0) {
let btnEls = [];
for(let i = 0; i < buttons.length; i++) {
for (let i = 0; i < buttons.length; i++) {
let btn = buttons[i];
if (!btn.visible) btn.visible = () => true
if (!btn.visible) btn.visible = () => true;
if (!btn.visible()) {
continue;
} else {
let btnR = Object.assign({}, btn.buttonRender)
if(btnR && btnR.name) {
btnEls.push(renderHoc(h, _vm, btnR))
let btnR = Object.assign({}, btn.buttonRender);
if (btnR && btnR.name) {
btnEls.push(renderHoc(h, _vm, btnR));
// contentVNs = [
// h(btnR.name, btnR, [btnR.value || null]), h('span', {
// class: "ml-1"
// }, btn.name)]
} else {
contentVNs = [btn.name]
btnEls.push(h('el-button', {
props: { size: "small", ...btn.props },
attrs: btn.attrs,
on: { ...btn.events }
}, contentVNs))
contentVNs = [btn.name];
btnEls.push(
h(
"el-button",
{
props: { size: "small", ...btn.props },
attrs: btn.attrs,
on: { ...btn.events },
},
contentVNs
)
);
}
}
}
return h('div', {
class: [
'pt-4'
]
}, btnEls)
return h(
"div",
{
class: ["pt-4"],
},
btnEls
);
}
}
function renderFormItem (h, _vm, items = [], className = "ml-6", title) {
const { titleColon, data: itemsData, itemSize } = _vm
function renderFormItem(h, _vm, items = [], className = "ml-6", title) {
const { titleColon, data: itemsData, itemSize } = _vm;
// 显示表单项
if(items && items.length > 0) {
let contentVNs = []
let formItemList = []
if (items && items.length > 0) {
let contentVNs = [];
let formItemList = [];
items.map((item, index) => {
if (!item.visible) item.visible = () => true
if (!item.visible) item.visible = () => true;
if (item.visible()) {
const itemR = Object.assign({}, item.itemRender)
const itemR = Object.assign({}, item.itemRender);
let renderValue = XEUtils.get(itemsData, item.field);
......@@ -59,160 +66,231 @@ function renderFormItem (h, _vm, items = [], className = "ml-6", title) {
if (item.formatter) {
const globalFunc = formats[item.formatter];
const formatParams = { cellValue: renderValue, row: item };
renderValue = globalFunc ? globalFunc(formatParams) : '暂无'
renderValue = globalFunc ? globalFunc(formatParams) : "暂无";
}
if(itemR && itemR.name) {
if (itemR && itemR.name) {
// itemR.class = [itemSize === "mini" ? "text-sm" : "text-base", itemR.class]
// 默认组装组件 props,传入 value 属性
if (itemR.props) itemR.props.value = renderValue;
contentVNs = [h(itemR.name, itemR, renderValue)]
contentVNs = [h(itemR.name, itemR, renderValue)];
} else {
contentVNs = [h('span', renderValue)]
contentVNs = [h("span", renderValue)];
}
formItemList.push([
h('span', {
class: ["text-color-secondary", {
[className]: title ? true : index > 0
}]
}, item.title ? [
item.title,
titleColon ? h('span', ": ") : ""
] : null )].concat(contentVNs)
)
formItemList.push(
[
h(
"span",
{
class: [
"text-color-secondary",
{
[className]: title ? true : index > 0,
},
],
},
item.title ? [item.title, titleColon ? h("span", ": ") : ""] : null
),
].concat(contentVNs)
);
}
})
return h('div', {
class: ["float-left text-color-primary", itemSize === "mini" ? "text-sm" : "text-base"]
}, formItemList)
});
return h(
"div",
{
class: [
"float-left text-color-primary",
itemSize === "mini" ? "text-sm" : "text-base",
],
},
formItemList
);
}
}
import { useDefaultData } from "../../../../composables";
export default {
name: 'lwc-data-display-detail-header',
name: "lwc-data-display-detail-header",
props: {
data: Object,
itemRender: Object,
title: [String, Object],
titleColon: {
type: Boolean,
default: true
default: true,
},
imageConfig: Object,
items: Array,
buttons: Array,
showHeaderBtn: {
type: Boolean,
default: true
default: true,
},
itemSize: {
type: String,
default: "mini"
default: "mini",
},
shadow: {
type: String,
default: "shadow-md"
}
default: "shadow-md",
},
},
render(h) {
const { shadow, title, showHeaderBtn, items, buttons } = this.$props;
let titleName = title
let titleItem = []
if(typeof title === 'object') {
titleName = title.name
titleItem = title.items
let titleName = title;
let titleItem = [];
if (typeof title === "object") {
titleName = title.name;
titleItem = title.items;
}
const { defaultAvatar } = useDefaultData();
if (this.imageConfig) this.imageConfig.src = this.imageConfig.src ? this.imageConfig.src : defaultAvatar
return h('el-card', {
class: ["w-full h-full rounded-none lwc-layout-card relative", shadow],
attrs: {
shadow: "never"
}
},[
this.imageConfig ? h('div', {
class: "float-left text-center",
style: Object.assign(this.imageConfig && this.imageConfig.center ? {
position: "absolute",
"margin-top": -(this.imageConfig && this.imageConfig.size)/2 + "px",
top: "50%"
} : {}, {
width: this.imageConfig && this.imageConfig.size + "px"
})
}, [h("el-avatar", {
props: this.imageConfig
})]) : null,
h('div', {
style: {
"margin-left": this.imageConfig && this.imageConfig.size + 20 + "px"
}
},[
h('div', {
class: "overflow-hidden",
style: {
"line-height": "32px"
}
}, [
h('div', {
class: "text-2xl text-color-main float-left"
}, titleName),
renderFormItem(h, this, titleItem, "ml-4", titleName),
showHeaderBtn ? h('el-button-group', {
class: "float-right"
}, [
h('el-tooltip', {
props: {
effect: "dark",
content: "上一条",
placement: "top"
}
}, [
h('el-button', {
props: {
icon: "el-icon-arrow-left",
size: "small"
},
on: {
click: () => {
this.$emit('onPrevDetail', { data: this.data })
if (this.imageConfig) {
this.imageConfig.src = this.imageConfig.src ? this.imageConfig.src : defaultAvatar;
}
return h(
"el-card",
{
class: ["w-full h-full rounded-none lwc-layout-card relative", shadow],
attrs: {
shadow: "never",
},
},
[
this.imageConfig
? h(
"div",
{
class: "float-left text-center",
style: Object.assign(
this.imageConfig && this.imageConfig.center
? {
position: "absolute",
"margin-top":
-(this.imageConfig && this.imageConfig.size) /
2 +
"px",
top: "50%",
}
: {},
{
width: this.imageConfig && this.imageConfig.size + "px",
}
}
})
]),
h('el-tooltip', {
props: {
effect: "dark",
content: "下一条",
placement: "top"
}
}, [
h('el-button', {
props: {
size: "small"
),
},
[
h("el-avatar", {
props: this.imageConfig,
}),
]
)
: null,
h(
"div",
{
style: {
"margin-left": this.imageConfig && this.imageConfig.size + 20 + "px",
},
},
[
h(
"div",
{
class: "overflow-hidden",
style: {
"line-height": "32px",
},
on: {
click: () => {
this.$emit('onNextDetail', { data: this.data })
}
}
}, [
h('i', {
class: "el-icon-arrow-right el-icon--right"
})
])
])
]) : null
]),
h('div', {
class: "pt-2 overflow-hidden"
}, [
renderFormItem(h, this, items)
]),
renderButtonList(h, this, buttons),
])
]);
},
[
h(
"div",
{
class: "text-2xl text-color-main float-left",
},
titleName
),
renderFormItem(h, this, titleItem, "ml-4", titleName),
showHeaderBtn
? h(
"el-button-group",
{
class: "float-right",
},
[
h(
"el-tooltip",
{
props: {
effect: "dark",
content: "上一条",
placement: "top",
},
},
[
h("el-button", {
props: {
icon: "el-icon-arrow-left",
size: "small",
},
on: {
click: () => {
this.$emit("onPrevDetail", {
data: this.data,
});
},
},
}),
]
),
h(
"el-tooltip",
{
props: {
effect: "dark",
content: "下一条",
placement: "top",
},
},
[
h(
"el-button",
{
props: {
size: "small",
},
on: {
click: () => {
this.$emit("onNextDetail", {
data: this.data,
});
},
},
},
[
h("i", {
class:
"el-icon-arrow-right el-icon--right",
}),
]
),
]
),
]
)
: null,
]
),
h(
"div",
{
class: "pt-2 overflow-hidden",
},
[renderFormItem(h, this, items)]
),
renderButtonList(h, this, buttons),
]
),
]
);
},
}
};