diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..91dfed8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+.DS_Store
+node_modules
\ No newline at end of file
diff --git a/components/amount/index.scss b/components/amount/index.scss
new file mode 100644
index 0000000..bb6069e
--- /dev/null
+++ b/components/amount/index.scss
@@ -0,0 +1,3 @@
+.zui-amount.numerical {
+ font-family: DINPro-Medium, DIN Alternate, "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
+}
\ No newline at end of file
diff --git a/components/amount/index.vue b/components/amount/index.vue
new file mode 100644
index 0000000..3bb2cae
--- /dev/null
+++ b/components/amount/index.vue
@@ -0,0 +1,209 @@
+
+
+
+
+ {{ prefix }}
+
+
+ {{ Number(value || 0) | doPrecision(precision > 0 ? precision : 0, isRoundUp) | doFormat(hasSeparator, separator) }}
+
+
+ {{ Number(value || 0) | doPrecision(4, isRoundUp) | doCapital }}
+
+
+
+
+
+
+
diff --git a/components/button/index.scss b/components/button/index.scss
new file mode 100644
index 0000000..dd5a2e7
--- /dev/null
+++ b/components/button/index.scss
@@ -0,0 +1,69 @@
+.zui-button {
+ color: #323233;
+ background-color: #fff;
+ border: 1upx solid $color-border;
+ padding: $h-gap-md $v-gap-md;
+ font-size: $font-md;
+ cursor: pointer;
+ transition: all 150ms;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 10upx;
+ &.sm {
+ padding: $h-gap-sm $v-gap-sm;
+ font-size: $font-sm;
+ }
+ &.lg {
+ padding: $h-gap-lg $v-gap-lg;
+ font-size: $font-lg;
+ }
+ &.active {
+ background-color: $bg-active;
+ border-color: $bg-active;
+ }
+ &.primary {
+ background-color: $color-primary;
+ border-color: $color-primary;
+ color: #FFF;
+ &.active {
+ background-color: darken($color-primary, 3%);
+ border-color: darken($color-primary, 3%);
+ }
+ }
+ &.secondary {
+ background-color: lighten($color-primary, 40%);
+ border-color: lighten($color-primary, 40%);
+ color: $color-primary;
+ &.active {
+ background-color: lighten($color-primary, 30%);
+ border-color: lighten($color-primary, 30%);
+ color: darken($color-primary, 3%);
+ }
+ }
+ &.link {
+ padding: $h-gap-sm $v-gap-sm;
+ background: inherit;
+ border: inherit;
+ color: $color-primary;
+ &.active {
+ color: darken($color-primary, 5%);
+ }
+ }
+ &.disabled {
+ border-color: $bg-disabled;
+ background-color: $bg-disabled;
+ color: $color-disabled;
+ cursor: not-allowed;
+ &.active {
+ border-color: $bg-disabled;
+ background-color: $bg-disabled;
+ }
+ }
+ &.round {
+ border-radius: 48upx;
+ }
+ &.square {
+ border-radius: 0upx;
+ }
+}
\ No newline at end of file
diff --git a/components/button/index.vue b/components/button/index.vue
new file mode 100644
index 0000000..5e77b61
--- /dev/null
+++ b/components/button/index.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/cell/index.scss b/components/cell/index.scss
new file mode 100644
index 0000000..1a799d2
--- /dev/null
+++ b/components/cell/index.scss
@@ -0,0 +1,52 @@
+.zui-cell {
+ position: relative;
+ display: flex;
+ box-sizing: border-box;
+ width: 100%;
+ padding: $h-gap-lg $v-gap-md;
+ border-bottom: 1upx solid $color-border;
+ overflow: hidden;
+ background-color: #fff;
+ &--clickable {
+ cursor: pointer;
+ transition: background-color 150ms;
+ &.active {
+ background-color: $bg-active;
+ }
+ }
+ &__left-icon, &__right-icon {
+ display: flex;
+ align-items: center;
+ font-size: 42upx;
+ }
+ &__left-icon {
+ margin-left: $v-gap-sm;
+ }
+ &__right-icon {
+ margin-left: $v-gap-sm;
+ color: $color-disabled;
+ }
+ &__title, &__value {
+ flex: 1;
+ display: flex;
+ }
+ &__title {
+ flex-direction: column;
+ justify-content: center;
+ }
+ &__value {
+ align-items: center;
+ justify-content: flex-end;
+ position: relative;
+ overflow: hidden;
+ color: $color-minor;
+ text-align: right;
+ vertical-align: middle;
+ word-wrap: break-word;
+ }
+ &__label {
+ padding-top: $h-gap-sm;
+ color: $color-minor;
+ font-size: $font-sm;
+ }
+}
diff --git a/components/cell/index.vue b/components/cell/index.vue
new file mode 100644
index 0000000..317b3cd
--- /dev/null
+++ b/components/cell/index.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+ {{ title }}
+
+
+
+
+ {{ label }}
+
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/icon/index.scss b/components/icon/index.scss
new file mode 100644
index 0000000..c3d33a0
--- /dev/null
+++ b/components/icon/index.scss
@@ -0,0 +1,31 @@
+.zui-icon {
+ position: relative;
+ display: inline-block;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+}
+
+.zui-info {
+ position: absolute;
+ top: 0;
+ right: 0;
+ box-sizing: border-box;
+ min-width: 32upx;
+ padding: 0 4upx;
+ color: #fff;
+ font-weight: 500;
+ font-size: 20upx;
+ font-family: PingFang SC, Helvetica Neue, Arial, sans-serif;
+ line-height: 1.5;
+ text-align: center;
+ background-color: $color-error;
+ border: 1upx solid #fff;
+ border-radius: 1rem;
+ transform: translate(50%, -50%);
+ transform-origin: 100%;
+ &.dot {
+ height: 24upx;
+ width: 24upx;
+ min-width: 24upx !important;
+ }
+}
diff --git a/components/icon/index.vue b/components/icon/index.vue
new file mode 100644
index 0000000..6c6d165
--- /dev/null
+++ b/components/icon/index.vue
@@ -0,0 +1,43 @@
+
+
+ {{ dot ? '' : info }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/loading/index.scss b/components/loading/index.scss
new file mode 100644
index 0000000..0b37b44
--- /dev/null
+++ b/components/loading/index.scss
@@ -0,0 +1,126 @@
+.zui-loading {
+ color: $color-minor;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ &__spinner {
+ position: relative;
+ display: inline-block;
+ width: 50upx;
+ max-width: 100%;
+ height: 50upx;
+ max-height: 100%;
+ vertical-align: middle;
+ animation: zui-rotate 0.8s linear infinite;
+ &--spinner {
+ animation-timing-function: steps(12);
+ .zui-loading__dot {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ &::before {
+ display: block;
+ width: 2upx;
+ height: 25%;
+ margin: 0 auto;
+ background-color: currentColor;
+ border-radius: 40%;
+ content: ' ';
+ }
+ &:nth-of-type(1) {
+ transform: rotate(30deg);
+ opacity: 1;
+ }
+ &:nth-of-type(2) {
+ transform: rotate(60deg);
+ opacity: 0.9375;
+ }
+ &:nth-of-type(3) {
+ transform: rotate(90deg);
+ opacity: 0.875;
+ }
+ &:nth-of-type(4) {
+ transform: rotate(120deg);
+ opacity: 0.8125;
+ }
+ &:nth-of-type(5) {
+ transform: rotate(150deg);
+ opacity: 0.75;
+ }
+ &:nth-of-type(6) {
+ transform: rotate(180deg);
+ opacity: 0.6875;
+ }
+ &:nth-of-type(7) {
+ transform: rotate(210deg);
+ opacity: 0.625;
+ }
+ &:nth-of-type(8) {
+ transform: rotate(240deg);
+ opacity: 0.5625;
+ }
+ &:nth-of-type(9) {
+ transform: rotate(270deg);
+ opacity: 0.5;
+ }
+ &:nth-of-type(10) {
+ transform: rotate(300deg);
+ opacity: 0.4375;
+ }
+ &:nth-of-type(11) {
+ transform: rotate(330deg);
+ opacity: 0.375;
+ }
+ &:nth-of-type(12) {
+ transform: rotate(360deg);
+ opacity: 0.3125;
+ }
+ }
+ }
+ &--circular {
+ border: 1upx solid transparent;
+ border-top-color: currentColor;
+ border-radius: 100%;
+ }
+ }
+ &__text {
+ margin-left: $v-gap-sm;
+ color: $color-minor;
+ font-size: $font-md;
+ }
+ &--vertical {
+ flex-direction: column;
+ .zui-loading__text {
+ margin: $h-gap-sm 0 0;
+ }
+ }
+}
+
+@keyframes zui-circular {
+ 0% {
+ stroke-dasharray: 1, 200;
+ stroke-dashoffset: 0;
+ }
+
+ 50% {
+ stroke-dasharray: 90, 150;
+ stroke-dashoffset: -40;
+ }
+
+ 100% {
+ stroke-dasharray: 90, 150;
+ stroke-dashoffset: -120;
+ }
+}
+
+@keyframes zui-rotate {
+ from {
+ transform: rotate(0deg);
+ }
+
+ to {
+ transform: rotate(360deg);
+ }
+}
diff --git a/components/loading/index.vue b/components/loading/index.vue
new file mode 100644
index 0000000..190c9d9
--- /dev/null
+++ b/components/loading/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/tag/index.scss b/components/tag/index.scss
new file mode 100644
index 0000000..e464e29
--- /dev/null
+++ b/components/tag/index.scss
@@ -0,0 +1,68 @@
+.zui-tag {
+ font-size: $font-sm;
+ text-align: center;
+ display: inline-block;
+ -webkit-user-select: none;
+ .default {
+ background: rgba(0,0,0,0);
+ color: $color-error;
+ border-color: $color-error;
+ }
+ .shape-dot {
+ border-radius: 50%;
+ height: 32upx;
+ width: 32upx;
+ &.size-tiny {
+ height: 16upx;
+ width: 16upx;
+ }
+ }
+ .shape-square {
+ padding: 0 $v-gap-sm;
+ border-radius: 0;
+ }
+ .shape-fillet {
+ padding: $h-gap-sm $v-gap-sm;
+ }
+ .shape-bubble {
+ width: 50upx;
+ padding: 7upx 0;
+ border-radius: 50%;
+ border-bottom-left-radius: 0;
+ box-sizing: border-box;
+ &.size-small {
+ width: 40upx;
+ padding: 5upx 0;
+ }
+ &.size-tiny {
+ width: 30upx;
+ padding: 2upx 0;
+ }
+ }
+ .type-fill {
+ color: #fff;
+ }
+ .type-ghost {
+ border: 1px solid $color-error;
+ background: rgba(0,0,0,0);
+ }
+ .font-weight-normal {
+ font-weight: normal;
+ }
+ .font-weight-bold {
+ font-weight: bold;
+ }
+ .font-weight-bolder {
+ font-weight: bolder;
+ }
+ .size-large {
+ font-size: $font-md;
+ }
+ .size-small {
+ font-size: $font-sm;
+ }
+ .size-tiny {
+ font-size: $font-sm * 0.9;
+ }
+}
+
diff --git a/components/tag/index.vue b/components/tag/index.vue
new file mode 100644
index 0000000..5b92bf7
--- /dev/null
+++ b/components/tag/index.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..c1db183
--- /dev/null
+++ b/index.js
@@ -0,0 +1,15 @@
+import Amount from './components/amount';
+import Button from './components/button';
+import Cell from './components/cell';
+import Icon from './components/icon';
+import Loading from './components/loading';
+import Tag from './components/tag';
+
+export default {
+ Amount,
+ Button,
+ Cell,
+ Icon,
+ Loading,
+ Tag
+};
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..21e3c4d
--- /dev/null
+++ b/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "zui-uniapp",
+ "version": "1.0.0",
+ "main": "index.js",
+ "repository": "git@114.55.84.72:frontend/zui-uniapp.git",
+ "author": "刘汉宸 ",
+ "license": "MIT",
+ "private": true
+}
--
libgit2 0.21.0