Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide
2 文件已复制
378 文件已重命名
1个文件已删除
156个文件已添加
New file |
| | |
| | | { |
| | | "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages |
| | | { |
| | | "path": "pages/index/index", |
| | | "style": { |
| | | "navigationBarTitleText": "uni-app" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/add-progress/index", |
| | | "style": { |
| | | "navigationBarTitleText": "添加办理进度", |
| | | "navigationBarBackgroundColor": "#ffffff" |
| | | } |
| | | },{ |
| | | "path": "pages/work-detail/work-detail", |
| | | "style": { |
| | | "navigationBarTitleText": "诉求详情", |
| | | "navigationBarBackgroundColor": "#ffffff", |
| | | "navigationStyle": "custom"} |
| | | }, |
| | | { |
| | | "path": "pages/problemReporting/problemReporting", |
| | | "style": { |
| | | "navigationBarTitleText": "问题上报", |
| | | "navigationBarBackgroundColor": "#ffffff" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/dispatchWorkOrder/dispatchWorkOrder", |
| | | "style": { |
| | | "navigationBarTitleText": "工单下派", |
| | | "navigationBarBackgroundColor": "#ffffff" |
| | | } |
| | | } |
| | | ], |
| | | "globalStyle": { |
| | | "navigationBarTextStyle": "black", |
| | | "navigationBarTitleText": "uni-app", |
| | | "navigationBarBackgroundColor": "#F8F8F8", |
| | | "backgroundColor": "#F8F8F8" |
| | | }, |
| | | "uniIdRouter": {} |
| | | } |
New file |
| | |
| | | <template> |
| | | <view class="px-31 pt-38"> |
| | | <view class="br-19 bs-1 pt-21 pb-35 px-27 bgcolor2"> |
| | | <view class="flex a-center j-between fs-23 lh-33 font-bold"> |
| | | <view>诉求号:7843523454</view> |
| | | <view class="color1">正在办理</view> |
| | | </view> |
| | | <view class="mx-13 mt-33 pt-35 pb-33 px-27 br-19 flex a-center j-between bgcolor1"> |
| | | <view class="fs-27 lh-38 color2">江苏省常州市溧阳市牛顿大道172号</view> |
| | | <image src="../../static/public/gps.png" class="w-31 h-31 shrink0" /> |
| | | </view> |
| | | <view class="flex a-center j-between mt-31 mx-13"> |
| | | <view class="flex-column a-center"> |
| | | <view class="fs-27 lh-38 font-bold">问题类型</view> |
| | | <view class="mt-8 fs-23 lh-42 txt-center px-31 font-w400 color3 bgcolor3 border1">教育</view> |
| | | </view> |
| | | <view class="flex-column a-center"> |
| | | <view class="fs-27 lh-38 font-bold">群众</view> |
| | | <view class="fs-27 lh-38 mt-10">沙振</view> |
| | | </view> |
| | | <view class="flex-column a-center"> |
| | | <view class="fs-27 lh-38 font-bold">联系电话</view> |
| | | <view class="fs-27 lh-38 mt-10">14225874426</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | } |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .bs-1 { |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .color1 { |
| | | color: #FF4948; |
| | | } |
| | | |
| | | .color2 { |
| | | color: rgba(0, 0, 0, .8); |
| | | } |
| | | |
| | | .color3 { |
| | | color: #FAAD14; |
| | | } |
| | | |
| | | .bgcolor1 { |
| | | background: linear-gradient(270deg, rgba(255, 241, 0, 0.5) 0%, rgba(255, 249, 172, 0.25) 48%, rgba(255, 255, 255, 0.2) 100%, #FFFFFF 100%); |
| | | } |
| | | |
| | | .bgcolor2 { |
| | | background: linear-gradient(180deg, #FFDCDB 0%, rgba(255, 255, 255, 0) 25%); |
| | | } |
| | | |
| | | .bgcolor3 { |
| | | background: #FFFBE6; |
| | | } |
| | | |
| | | .border1 { |
| | | border: 2rpx solid #FFF1B8; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <view class="problem-report-page"> |
| | | <view class="info-cards"> |
| | | <view class="info-top"> |
| | | <view class="num">诉求号:7843523454</view> |
| | | <view class="status">正在办理</view> |
| | | </view> |
| | | |
| | | <view class="address"> |
| | | <view class="adr">江苏省常州市溧阳市牛顿大道172号</view> |
| | | <image src="/static/position@2x.png" class="w-31 h-31" mode="aspectFill"></image> |
| | | </view> |
| | | |
| | | <view class="table-head"> |
| | | <view class="type flex1">问题类型</view> |
| | | <view class="person flex1">群众</view> |
| | | <view class="phone flex1">联系电话</view> |
| | | </view> |
| | | |
| | | <view class="table-body"> |
| | | <view class="table-item"> |
| | | <view class="type-tip flex1"> |
| | | <view class="tip"> |
| | | 教育 |
| | | </view> |
| | | </view> |
| | | <view class="person-item flex1">沙振</view> |
| | | <view class="phone-item flex1">14225874426</view> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | <view class="input-card"> |
| | | <view class="title mb-27"> |
| | | 上报说明 |
| | | </view> |
| | | <u--textarea style="background-color:rgba(248, 248, 248, 1);border: unset;padding:25rpx 30.77rpx;" |
| | | height="365.38rpx" v-model="content" placeholder="请输入内容"></u--textarea> |
| | | </view> |
| | | |
| | | <view class="notice-tip flex a-center "> |
| | | <image src="/static/warnng@2x.png" class="w-31 h-31 mr-15" mode="aspectFill"></image> |
| | | 提交后会由上级部门进行审核,请留意审核结果 |
| | | </view> |
| | | <view class="btn">下派至下级部门</view> |
| | | |
| | | <u-popup round="19rpx" :show="showPop" mode="center" @close="close" @open="open"> |
| | | <view class="popup-content"> |
| | | <view class="title-pop">请选择下派单位</view> |
| | | <view class="pop-label">社区:</view> |
| | | <view class="pop-select"> |
| | | 请选择 |
| | | </view> |
| | | |
| | | <view class="botton-btn"> |
| | | <view class="cancle">取消</view> |
| | | <view class="sure">确定</view> |
| | | </view> |
| | | </view> |
| | | </u-popup> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | content: '', |
| | | showPop: false, |
| | | }; |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | |
| | | |
| | | <style lang="scss" scoped> |
| | | .problem-report-page { |
| | | padding-top: 38.46rpx; |
| | | margin: 0 30.77rpx; |
| | | |
| | | .info-cards { |
| | | padding: 21.15rpx 26.92rpx 36.54rpx 26.92rpx; |
| | | background: #FFFFFF; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | background: linear-gradient(180deg, #FFDCDB 0%, rgba(255, 255, 255, 0) 100%); |
| | | border-radius: 19rpx; |
| | | |
| | | .info-top { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | .num { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 23rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 33rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .status { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 23rpx; |
| | | color: #FF4948; |
| | | line-height: 33rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | } |
| | | |
| | | .address { |
| | | margin: 32.69rpx 13.46rpx 30.77rpx 13.46rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | // height: 106rpx; |
| | | background: linear-gradient(270deg, rgba(255, 241, 0, 0.5) 0%, rgba(255, 249, 172, 0.25) 48%, rgba(255, 255, 255, 0.2) 100%, #FFFFFF 100%); |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 19rpx; |
| | | align-items: center; |
| | | padding: 38.46rpx 26.92rpx 36.54rpx 26.92rpx; |
| | | |
| | | .adr { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | } |
| | | |
| | | .table-head { |
| | | display: flex; |
| | | text-align: center; |
| | | |
| | | .type { |
| | | text-align: left; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .person { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .phone { |
| | | font-family: PingFang-SC, PingFang-SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | } |
| | | |
| | | .table-item { |
| | | display: flex; |
| | | display: flex; |
| | | text-align: center; |
| | | margin-top: 8rpx; |
| | | |
| | | .tip { |
| | | width: calc(108rpx - 30.77rpx - 30.77rpx); |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 23rpx; |
| | | color: #FAAD14; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | padding: 1.92rpx 30.77rpx; |
| | | background: #FFFBE6; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 8rpx; |
| | | border: 2rpx solid #FFF1B8; |
| | | } |
| | | |
| | | .person-item { |
| | | font-family: PingFang-SC, PingFang-SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .phone-item { |
| | | font-family: PingFang-SC, PingFang-SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | .input-card { |
| | | // width: 688rpx; |
| | | min-height: calc(504rpx - 34.62rpx - 38.46rpx); |
| | | padding: 34.62rpx 30.77rpx 38.46rpx 30.77rpx; |
| | | border-radius: 19rpx; |
| | | background: #FFFFFF; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | margin-top: 38.46rpx; |
| | | |
| | | .title { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | } |
| | | |
| | | .notice-tip { |
| | | margin-top: 38.46rpx; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 27rpx; |
| | | color: #FF4948; |
| | | line-height: 42rpx; |
| | | } |
| | | |
| | | |
| | | .btn { |
| | | position: fixed; |
| | | bottom: calc(38.46rpx + env(safe-area-inset-bottom)); |
| | | left: 0; |
| | | right: 0; |
| | | width: 688rpx; |
| | | height: 96rpx; |
| | | background: linear-gradient(270deg, #FC8D55 0%, #FF4948 100%); |
| | | border-radius: 48rpx; |
| | | margin: 0 auto; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 35rpx; |
| | | color: #FFFFFF; |
| | | } |
| | | } |
| | | |
| | | .popup-content { |
| | | background: url('/static/pop@2x.png') no-repeat center center; |
| | | width: 576.92rpx; |
| | | height: 425rpx; |
| | | border-radius: 19rpx; |
| | | |
| | | .title-pop { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 35rpx; |
| | | color: rgba(0, 0, 0, 0.8); |
| | | line-height: 35rpx; |
| | | text-align: center; |
| | | margin-top: 46.15rpx; |
| | | } |
| | | |
| | | .pop-label { |
| | | font-family: PingFang-SC, PingFang-SC; |
| | | font-weight: 500; |
| | | font-size: 31rpx; |
| | | color: rgba(0, 0, 0, 0.6); |
| | | margin-top: 46.15rpx; |
| | | margin-left: 64.54rpx; |
| | | } |
| | | |
| | | .pop-select { |
| | | height: 77rpx; |
| | | background: #FFFFFF; |
| | | border-radius: 15rpx; |
| | | border: 2rpx solid rgba(0, 0, 0, 0.15); |
| | | margin-left: 61.54rpx; |
| | | margin-top: 19.23rpx; |
| | | margin-right: 61.54rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | padding-left: 30.77rpx; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 31rpx; |
| | | color: rgba(0, 0, 0, 0.24); |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .botton-btn { |
| | | display: flex; |
| | | margin-top: 44.23rpx; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .cancle { |
| | | width: 212rpx; |
| | | height: 77rpx; |
| | | border-radius: 48rpx; |
| | | border: 2rpx solid rgba(0, 0, 0, 0.8); |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.8); |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-right: 32.69rpx; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .sure { |
| | | width: 212rpx; |
| | | height: 77rpx; |
| | | background: linear-gradient(270deg, #FC8D55 0%, #FF4948 100%); |
| | | border-radius: 48rpx; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 27rpx; |
| | | color: #FFFFFF; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <view class="problem-report-page"> |
| | | <view class="info-cards"> |
| | | <view class="info-top"> |
| | | <view class="num">诉求号:7843523454</view> |
| | | <view class="status">正在办理</view> |
| | | </view> |
| | | |
| | | <view class="address"> |
| | | <view class="adr">江苏省常州市溧阳市牛顿大道172号</view> |
| | | <image src="/static/position@2x.png" class="w-31 h-31" mode="aspectFill"></image> |
| | | </view> |
| | | |
| | | <view class="table-head"> |
| | | <view class="type flex1">问题类型</view> |
| | | <view class="person flex1">群众</view> |
| | | <view class="phone flex1">联系电话</view> |
| | | </view> |
| | | |
| | | <view class="table-body"> |
| | | <view class="table-item"> |
| | | <view class="type-tip flex1"> |
| | | <view class="tip"> |
| | | 教育 |
| | | </view> |
| | | </view> |
| | | <view class="person-item flex1">沙振</view> |
| | | <view class="phone-item flex1">14225874426</view> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | <view class="input-card"> |
| | | <view class="title mb-27"> |
| | | 上报说明 |
| | | </view> |
| | | <u--textarea style="background-color:rgba(248, 248, 248, 1);border: unset;padding:25rpx 30.77rpx;" |
| | | height="365.38rpx" v-model="content" placeholder="请输入内容"></u--textarea> |
| | | </view> |
| | | |
| | | <view class="notice-tip flex a-center "> |
| | | <image src="/static/warnng@2x.png" class="w-31 h-31 mr-15" mode="aspectFill"></image> |
| | | 提交后会由上级部门进行审核,请留意审核结果 |
| | | </view> |
| | | |
| | | <view class="btn">提交至上级部门</view> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | content: '', |
| | | }; |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | |
| | | |
| | | <style lang="scss" scoped> |
| | | .problem-report-page { |
| | | padding-top: 38.46rpx; |
| | | margin: 0 30.77rpx; |
| | | |
| | | .info-cards { |
| | | padding: 21.15rpx 26.92rpx 36.54rpx 26.92rpx; |
| | | background: #FFFFFF; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | background: linear-gradient(180deg, #FFDCDB 0%, rgba(255, 255, 255, 0) 100%); |
| | | border-radius: 19rpx; |
| | | |
| | | .info-top { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | .num { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 23rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 33rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .status { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 23rpx; |
| | | color: #FF4948; |
| | | line-height: 33rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | } |
| | | |
| | | .address { |
| | | margin: 32.69rpx 13.46rpx 30.77rpx 13.46rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | // height: 106rpx; |
| | | background: linear-gradient(270deg, rgba(255, 241, 0, 0.5) 0%, rgba(255, 249, 172, 0.25) 48%, rgba(255, 255, 255, 0.2) 100%, #FFFFFF 100%); |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 19rpx; |
| | | align-items: center; |
| | | padding: 38.46rpx 26.92rpx 36.54rpx 26.92rpx; |
| | | |
| | | .adr { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | } |
| | | |
| | | .table-head { |
| | | display: flex; |
| | | text-align: center; |
| | | |
| | | .type { |
| | | text-align: left; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .person { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .phone { |
| | | font-family: PingFang-SC, PingFang-SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | } |
| | | |
| | | .table-item { |
| | | display: flex; |
| | | display: flex; |
| | | text-align: center; |
| | | margin-top: 8rpx; |
| | | |
| | | .tip { |
| | | width: calc(108rpx - 30.77rpx - 30.77rpx); |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 23rpx; |
| | | color: #FAAD14; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | padding: 1.92rpx 30.77rpx; |
| | | background: #FFFBE6; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 8rpx; |
| | | border: 2rpx solid #FFF1B8; |
| | | } |
| | | |
| | | .person-item { |
| | | font-family: PingFang-SC, PingFang-SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .phone-item { |
| | | font-family: PingFang-SC, PingFang-SC; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | .input-card { |
| | | // width: 688rpx; |
| | | min-height: calc(504rpx - 34.62rpx - 38.46rpx); |
| | | padding: 34.62rpx 30.77rpx 38.46rpx 30.77rpx; |
| | | border-radius: 19rpx; |
| | | background: #FFFFFF; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | margin-top: 38.46rpx; |
| | | |
| | | .title { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | } |
| | | |
| | | .notice-tip { |
| | | margin-top: 38.46rpx; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 27rpx; |
| | | color: #FF4948; |
| | | line-height: 42rpx; |
| | | } |
| | | |
| | | |
| | | .btn { |
| | | position: fixed; |
| | | bottom: calc(38.46rpx + env(safe-area-inset-bottom)); |
| | | left: 0; |
| | | right: 0; |
| | | width: 688rpx; |
| | | height: 96rpx; |
| | | background: linear-gradient(270deg, #FC8D55 0%, #FF4948 100%); |
| | | border-radius: 48rpx; |
| | | margin: 0 auto; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 35rpx; |
| | | color: #FFFFFF; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <view class="content"> |
| | | <u-navbar title="诉求详情" bgColor="transparent" autoBack> |
| | | </u-navbar> |
| | | <view class="topColor"> |
| | | </view> |
| | | <view class="allContent"> |
| | | <view class="topStatus"> |
| | | <view class="status">上报待上级审核</view> |
| | | <view class="tit">当前状态</view> |
| | | </view> |
| | | <!-- 上报待上级审核 --> |
| | | <view class="card1"> |
| | | <image src="../../static/detailImg/Ovaled.png" class="topIcon shrink0"></image> |
| | | <view class="infoCard"> |
| | | <view class="flex j-between"> |
| | | <view class="label">上报人</view> |
| | | <view class="value">张三</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">联系电话</view> |
| | | <view class="value">13987654321</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">所属部门</view> |
| | | <view class="value">XXXXXXX部门</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">上报时间</view> |
| | | <view class="value">2025-09-09 11:09:09</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">上报说明</view> |
| | | <view class="value">上报说明上报说明上报说明上报上报说明上报说明上报说明上报上报说明上报说明上报说明上报</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cardInfo"> |
| | | <view class="title">诉求号:7843523454</view> |
| | | <view class="addressCard"> |
| | | <view class="address">江苏省常州市溧阳市牛顿大道172号</view> |
| | | <image src="../../static/detailImg/dwei.png" class="addressIcon shrink0" mode="aspectFill"></image> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">创建时间</view> |
| | | <view class="value">2025-09-09 11:09:09</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">问题类型</view> |
| | | <view class="value">教育</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">群众</view> |
| | | <view class="value">张三</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label"> 联系电话</view> |
| | | <view class="value">13987654321</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">详细地址</view> |
| | | <view class="value">上报说明上报说明上报说明上报 |
| | | 上报说明上报说明上报说明上报说</view> |
| | | </view> |
| | | <!-- 上级端需要的字段 --> |
| | | <view class="flex j-between"> |
| | | <view class="label">录入人</view> |
| | | <view class="value">上报说明上报说明上报说明</view> |
| | | </view> |
| | | <view class="flex j-between"> |
| | | <view class="label">录入人联系方式</view> |
| | | <view class="value">13987654321</view> |
| | | </view> |
| | | <!-- 上级端需要的字段--> |
| | | </view> |
| | | <view class="problem"> |
| | | <view class="title">问题描述</view> |
| | | <view class="desc"> |
| | | <view class="top">问题标题问题标题问题标题问题标题</view> |
| | | <view class="line1"></view> |
| | | <view class="context">问题描述内容问题描述内容问题描述内容问题描述内容问题描述内容问题描述内容问题描述内容问题描述内容问题描述内容问题描述内容问题描述内容</view> |
| | | |
| | | </view> |
| | | <view class="title">描述图片</view> |
| | | <view class="descPic"> |
| | | <view class="picItem" v-for="(item,index) in 3"> |
| | | <image src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" |
| | | class="img shrink0" mode="aspectFill"> |
| | | </image> |
| | | </view> |
| | | </view> |
| | | <view class="title">描述视频</view> |
| | | <view class="descPic"> |
| | | <view class="picItem" v-for="(item,index) in 3"> |
| | | <image src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" |
| | | class="img shrink0" mode="aspectFill"> |
| | | </image> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | </view> |
| | | <view class="btnButtom"> |
| | | <view class="cancel">驳回</view> |
| | | <view class="sure">审核通过</view> |
| | | |
| | | </view> |
| | | |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | } |
| | | } |
| | | </script> |
| | | <style> |
| | | page { |
| | | background: linear-gradient(180deg, #FFFFFF 0%, #F9F9F9 6%, #F8F8F8 100%); |
| | | } |
| | | </style> |
| | | |
| | | <style lang="scss" scoped> |
| | | .topColor { |
| | | height: 346rpx; |
| | | background: linear-gradient(180deg, #FFDCDB 0%, rgba(255, 255, 255, 0) 100%); |
| | | // padding: 176rpx 27rpx 17rpx 27rpx; |
| | | } |
| | | |
| | | .allContent { |
| | | margin-top: -243rpx; |
| | | padding: 0 31rpx 98rpx 31rpx; |
| | | |
| | | |
| | | .topStatus { |
| | | .status { |
| | | font-weight: 600; |
| | | font-size: 44rpx; |
| | | color: #000000; |
| | | line-height: 62rpx; |
| | | margin-bottom: 15rpx; |
| | | } |
| | | |
| | | .tit { |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.8); |
| | | line-height: 38rpx; |
| | | margin-bottom: 17rpx; |
| | | } |
| | | } |
| | | |
| | | .card1 { |
| | | margin-top: 21rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | |
| | | .topIcon { |
| | | margin-top: 17rpx; |
| | | width: 19.23rpx; |
| | | height: 19.23rpx; |
| | | margin-right: 46rpx; |
| | | } |
| | | |
| | | .infoCard { |
| | | flex: 1; |
| | | background: #FFFFFF; |
| | | box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 0, 0, 0.06); |
| | | padding: 13rpx 30.77rpx 19rpx 31rpx; |
| | | border-radius: 27rpx; |
| | | |
| | | .label { |
| | | font-weight: 400; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 77rpx; |
| | | } |
| | | |
| | | .value { |
| | | max-width: 403rpx; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 77rpx; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .cardInfo { |
| | | margin-top: 38.46rpx; |
| | | background: #FFFFFF; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 8rpx; |
| | | padding: 21rpx 31rpx 38rpx 31rpx; |
| | | border-radius: 27rpx; |
| | | background: linear-gradient(180deg, #FFDCDB 0%, rgba(255, 255, 255, 0) 20%, rgba(255, 255, 255, 0) 100%); |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 23rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 33rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .addressCard { |
| | | margin: 33rpx 10rpx; |
| | | padding: 33rpx 27rpx; |
| | | background: linear-gradient(270deg, rgba(255, 241, 0, 0.5) 0%, rgba(255, 249, 172, 0.25) 48%, rgba(255, 255, 255, 0.2) 100%, #FFFFFF 100%); |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 19rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | |
| | | .address { |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: #000000; |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .addressIcon { |
| | | width: 30.77rpx; |
| | | height: 30.77rpx; |
| | | } |
| | | } |
| | | |
| | | .label { |
| | | font-weight: 400; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 77rpx; |
| | | } |
| | | |
| | | .value { |
| | | max-width: 403rpx; |
| | | font-weight: 500; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 77rpx; |
| | | } |
| | | |
| | | } |
| | | |
| | | .problem { |
| | | border-radius: 27rpx; |
| | | margin-top: 38.46rpx; |
| | | background: #FFFFFF; |
| | | box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | padding: 0 31rpx 34rpx 31rpx; |
| | | margin-bottom: 60rpx; |
| | | |
| | | .title { |
| | | padding-top: 34rpx; |
| | | font-weight: 600; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | line-height: 38rpx; |
| | | text-shadow: 0px 0px 27px rgba(0, 0, 0, 0.1); |
| | | margin-bottom: 27rpx; |
| | | } |
| | | |
| | | .desc { |
| | | background: #F8F8F8; |
| | | // box-shadow: 0rpx 0rpx 27rpx 0rpx rgba(0, 0, 0, 0.1); |
| | | border-radius: 8rpx; |
| | | padding: 29rpx 0 121rpx 0; |
| | | |
| | | .top { |
| | | padding: 0 31rpx; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.8); |
| | | line-height: 38rpx; |
| | | } |
| | | |
| | | .line1 { |
| | | margin: 27rpx 0; |
| | | height: 2rpx; |
| | | background: rgba(0, 10, 26, 0.07); |
| | | } |
| | | |
| | | .context { |
| | | padding: 0 31rpx; |
| | | font-size: 27rpx; |
| | | color: rgba(0, 0, 0, 0.8); |
| | | line-height: 38rpx; |
| | | } |
| | | } |
| | | |
| | | .descPic { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | |
| | | .picItem { |
| | | margin-right: 15rpx; |
| | | |
| | | .img { |
| | | width: 140.38rpx; |
| | | height: 140.38rpx; |
| | | border-radius: 7.69rpx; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .btnButtom { |
| | | position: fixed; |
| | | bottom: 0; |
| | | width: 100vw; |
| | | box-sizing: border-box; |
| | | padding: 33rpx 31rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | |
| | | .cancel { |
| | | background: #FFFFFF; |
| | | border: 2rpx solid; |
| | | box-shadow: 0 0 0 5px linear-gradient(270deg, rgba(252, 141, 85, 1), rgba(255, 73, 72, 1)); |
| | | border-image-slice: 1; |
| | | border-radius: 38rpx; |
| | | font-size: 27rpx; |
| | | color: #FF4948; |
| | | line-height: 38rpx; |
| | | padding: 19rpx 138rpx; |
| | | } |
| | | |
| | | .sure { |
| | | background: linear-gradient(270deg, #FC8D55 0%, #FF4948 100%); |
| | | border-radius: 38rpx; |
| | | font-size: 27rpx; |
| | | color: #FFFFFF; |
| | | line-height: 38rpx; |
| | | padding: 19rpx 119rpx 19rpx 119rpx; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | # http://editorconfig.org |
| | | root = true |
| | | |
| | | [*] |
| | | indent_style = space |
| | | indent_size = 2 |
| | | end_of_line = lf |
| | | charset = utf-8 |
| | | trim_trailing_whitespace = true |
| | | insert_final_newline = true |
| | | |
| | | [*.md] |
| | | trim_trailing_whitespace = false |
| | | |
| | | [Makefile] |
| | | indent_style = tab |
New file |
| | |
| | | REACT_APP_ENV=dev |
New file |
| | |
| | | REACT_APP_ENV=prod |
New file |
| | |
| | | REACT_APP_ENV=test |
New file |
| | |
| | | /lambda/ |
| | | /scripts |
| | | /config |
| | | .history |
| | | public |
| | | dist |
| | | .umi |
| | | mock |
New file |
| | |
| | | module.exports = { |
| | | extends: [require.resolve('@umijs/lint/dist/config/eslint')], |
| | | globals: { |
| | | page: false, |
| | | REACT_APP_ENV: false, |
| | | }, |
| | | }; |
New file |
| | |
| | | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. |
| | | |
| | | # dependencies |
| | | **/node_modules |
| | | # roadhog-api-doc ignore |
| | | /src/utils/request-temp.js |
| | | _roadhog-api-doc |
| | | |
| | | # production |
| | | /dist |
| | | /admin |
| | | |
| | | # misc |
| | | .DS_Store |
| | | npm-debug.log* |
| | | yarn-error.log |
| | | |
| | | /coverage |
| | | .idea |
| | | yarn.lock |
| | | package-lock.json |
| | | *bak |
| | | .vscode |
| | | |
| | | |
| | | # visual studio code |
| | | .history |
| | | *.log |
| | | functions/* |
| | | .temp/** |
| | | |
| | | # umi |
| | | .umi |
| | | .umi-production |
| | | .umi-test |
| | | |
| | | # screenshot |
| | | screenshot |
| | | .firebase |
| | | .eslintcache |
| | | |
| | | build |
New file |
| | |
| | | **/*.svg |
| | | .umi |
| | | .umi-production |
| | | /dist |
| | | .dockerignore |
| | | .DS_Store |
| | | .eslintignore |
| | | *.png |
| | | *.toml |
| | | docker |
| | | .editorconfig |
| | | Dockerfile* |
| | | .gitignore |
| | | .prettierignore |
| | | LICENSE |
| | | .eslintcache |
| | | *.lock |
| | | yarn-error.log |
| | | .history |
| | | CNAME |
| | | /build |
| | | /public |
New file |
| | |
| | | module.exports = { |
| | | singleQuote: true, |
| | | trailingComma: 'all', |
| | | printWidth: 100, |
| | | proseWrap: 'never', |
| | | endOfLine: 'auto', |
| | | overrides: [ |
| | | { |
| | | files: '.prettierrc', |
| | | options: { |
| | | parser: 'json', |
| | | }, |
| | | }, |
| | | { |
| | | files: 'document.ejs', |
| | | options: { |
| | | parser: 'html', |
| | | }, |
| | | }, |
| | | ], |
| | | }; |
copy from uni_modules/uview-ui/components/u-scroll-list/other.js
copy to management/README.md
New file |
| | |
| | | // https://umijs.org/config/ |
| | | import { defineConfig } from '@umijs/max'; |
| | | import defaultSettings from './defaultSettings'; |
| | | import Env from './env'; |
| | | import proxy from './proxy'; |
| | | import routes from './routes'; |
| | | |
| | | const { REACT_APP_ENV = 'dev' } = process.env; |
| | | |
| | | export default defineConfig({ |
| | | outputPath: 'admin', // 设置打包后的文件名为 admin |
| | | /** |
| | | * @name 开启 hash 模式 |
| | | * @description 让 build 之后的产物包含 hash 后缀。通常用于增量发布和避免浏览器加载缓存。 |
| | | * @doc https://umijs.org/docs/api/config#hash |
| | | */ |
| | | hash: true, |
| | | history: { |
| | | type: 'hash', |
| | | }, |
| | | /** |
| | | * @name 兼容性设置 |
| | | * @description 设置 ie11 不一定完美兼容,需要检查自己使用的所有依赖 |
| | | * @doc https://umijs.org/docs/api/config#targets |
| | | */ |
| | | // targets: { |
| | | // ie: 11, |
| | | // }, |
| | | /** |
| | | * @name 路由的配置,不在路由中引入的文件不会编译 |
| | | * @description 只支持 path,component,routes,redirect,wrappers,title 的配置 |
| | | * @doc https://umijs.org/docs/guides/routes |
| | | */ |
| | | // umi routes: https://umijs.org/docs/routing |
| | | routes, |
| | | /** |
| | | * @name 主题的配置 |
| | | * @description 虽然叫主题,但是其实只是 less 的变量设置 |
| | | * @doc antd的主题设置 https://ant.design/docs/react/customize-theme-cn |
| | | * @doc umi 的theme 配置 https://umijs.org/docs/api/config#theme |
| | | */ |
| | | theme: { |
| | | // 如果不想要 configProvide 动态设置主题需要把这个设置为 default |
| | | // 只有设置为 variable, 才能使用 configProvide 动态设置主色调 |
| | | 'root-entry-name': 'variable', |
| | | }, |
| | | /** |
| | | * @name moment 的国际化配置 |
| | | * @description 如果对国际化没有要求,打开之后能减少js的包大小 |
| | | * @doc https://umijs.org/docs/api/config#ignoremomentlocale |
| | | */ |
| | | ignoreMomentLocale: true, |
| | | /** |
| | | * @name 代理配置 |
| | | * @description 可以让你的本地服务器代理到你的服务器上,这样你就可以访问服务器的数据了 |
| | | * @see 要注意以下 代理只能在本地开发时使用,build 之后就无法使用了。 |
| | | * @doc 代理介绍 https://umijs.org/docs/guides/proxy |
| | | * @doc 代理配置 https://umijs.org/docs/api/config#proxy |
| | | */ |
| | | define: { |
| | | BASE_URL: Env[REACT_APP_ENV as keyof typeof proxy].SERVER_URL, |
| | | }, |
| | | proxy: proxy[REACT_APP_ENV as keyof typeof proxy], |
| | | /** |
| | | * @name 快速热更新配置 |
| | | * @description 一个不错的热更新组件,更新时可以保留 state |
| | | */ |
| | | fastRefresh: true, |
| | | //============== 以下都是max的插件配置 =============== |
| | | /** |
| | | * @name 数据流插件 |
| | | * @@doc https://umijs.org/docs/max/data-flow |
| | | */ |
| | | model: {}, |
| | | /** |
| | | * 一个全局的初始数据流,可以用它在插件之间共享数据 |
| | | * @description 可以用来存放一些全局的数据,比如用户信息,或者一些全局的状态,全局初始状态在整个 Umi 项目的最开始创建。 |
| | | * @doc https://umijs.org/docs/max/data-flow#%E5%85%A8%E5%B1%80%E5%88%9D%E5%A7%8B%E7%8A%B6%E6%80%81 |
| | | */ |
| | | initialState: {}, |
| | | /** |
| | | * @name layout 插件 |
| | | * @doc https://umijs.org/docs/max/layout-menu |
| | | */ |
| | | title: '三个身边', |
| | | layout: { |
| | | locale: false, |
| | | ...defaultSettings, |
| | | }, |
| | | /** |
| | | * @name moment2dayjs 插件 |
| | | * @description 将项目中的 moment 替换为 dayjs |
| | | * @doc https://umijs.org/docs/max/moment2dayjs |
| | | */ |
| | | moment2dayjs: { |
| | | preset: 'antd', |
| | | plugins: ['duration'], |
| | | }, |
| | | /** |
| | | * @name 国际化插件 |
| | | * @doc https://umijs.org/docs/max/i18n |
| | | */ |
| | | locale: { |
| | | default: 'zh-CN', |
| | | antd: true, |
| | | // default true, when it is true, will use `navigator.language` overwrite default |
| | | baseNavigator: true, |
| | | }, |
| | | /** |
| | | * @name antd 插件 |
| | | * @description 内置了 babel import 插件 |
| | | * @doc https://umijs.org/docs/max/antd#antd |
| | | */ |
| | | antd: {}, |
| | | /** |
| | | * @name 网络请求配置 |
| | | * @description 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。 |
| | | * @doc https://umijs.org/docs/max/request |
| | | */ |
| | | request: {}, |
| | | /** |
| | | * @name 权限插件 |
| | | * @description 基于 initialState 的权限插件,必须先打开 initialState |
| | | * @doc https://umijs.org/docs/max/access |
| | | */ |
| | | access: {}, |
| | | /** |
| | | * @name <head> 中额外的 script |
| | | * @description 配置 <head> 中额外的 script |
| | | */ |
| | | headScripts: [ |
| | | // 解决首次加载时白屏的问题 |
| | | { src: '/scripts/loading.js', async: true }, |
| | | ], |
| | | //================ pro 插件配置 ================= |
| | | presets: ['umi-presets-pro'], |
| | | mfsu: { |
| | | strategy: 'normal', |
| | | }, |
| | | favicons: [], |
| | | requestRecord: {}, |
| | | publicPath: REACT_APP_ENV === 'prod' ? '/admin/' : '/', |
| | | }); |
New file |
| | |
| | | import { ProLayoutProps } from '@ant-design/pro-components'; |
| | | |
| | | /** |
| | | * @name |
| | | */ |
| | | const Settings: ProLayoutProps & { |
| | | pwa?: boolean; |
| | | logo?: any; |
| | | } = { |
| | | navTheme: 'light', |
| | | menu: { |
| | | locale: false |
| | | }, |
| | | layout: 'mix', |
| | | contentWidth: 'Fluid', |
| | | fixedHeader: true, |
| | | fixSiderbar: true, |
| | | footerRender: false, |
| | | menuHeaderRender: false, |
| | | splitMenus: false, |
| | | colorWeak: false, |
| | | title: '三个身边', |
| | | pwa: true, |
| | | logo: false, |
| | | iconfontUrl: '', |
| | | token: { |
| | | // 参见ts声明,demo 见文档,通过token 修改样式 |
| | | //https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F |
| | | }, |
| | | }; |
| | | export default Settings; |
New file |
| | |
| | | export default { |
| | | dev: { |
| | | SERVER_URL: '', |
| | | }, |
| | | test: { |
| | | SERVER_URL: '', |
| | | }, |
| | | prod: { |
| | | SERVER_URL: '', |
| | | }, |
| | | }; |
New file |
| | |
| | | /** |
| | | * @name 代理的配置 |
| | | * @see 在生产环境 代理是无法生效的,所以这里没有生产环境的配置 |
| | | * ------------------------------- |
| | | * The agent cannot take effect in the production environment |
| | | * so there is no configuration of the production environment |
| | | * For details, please see |
| | | * https://pro.ant.design/docs/deploy |
| | | * |
| | | * @doc https://umijs.org/docs/guides/proxy |
| | | */ |
| | | import Env from './env'; |
| | | export default { |
| | | // 如果需要自定义本地开发服务器 请取消注释按需调整 |
| | | dev: { |
| | | '/api': { |
| | | // 要代理的地址 |
| | | target: Env['dev'].SERVER_URL, |
| | | // 配置了这个可以从 http 代理到 https |
| | | // 依赖 origin 的功能可能需要这个,比如 cookie |
| | | changeOrigin: true, |
| | | // pathRewrite: { '^/api': '/' }, |
| | | }, |
| | | }, |
| | | |
| | | /** |
| | | * @name 详细的代理配置 |
| | | * @doc https://github.com/chimurai/http-proxy-middleware |
| | | */ |
| | | test: { |
| | | '/rest/': { |
| | | target: Env['test'].SERVER_URL, |
| | | changeOrigin: true, |
| | | }, |
| | | }, |
| | | prod: { |
| | | '/rest/': { |
| | | target: Env['prod'].SERVER_URL, |
| | | changeOrigin: true, |
| | | }, |
| | | }, |
| | | }; |
New file |
| | |
| | | /** |
| | | * @name umi 的路由配置 |
| | | * @description 只支持 path,component,routes,redirect,wrappers,name,icon 的配置 |
| | | * @param path path 只支持两种占位符配置,第一种是动态参数 :id 的形式,第二种是 * 通配符,通配符只能出现路由字符串的最后。 |
| | | * @param component 配置 location 和 path 匹配后用于渲染的 React 组件路径。可以是绝对路径,也可以是相对路径,如果是相对路径,会从 src/pages 开始找起。 |
| | | * @param routes 配置子路由,通常在需要为多个路径增加 layout 组件时使用。 |
| | | * @param redirect 配置路由跳转 |
| | | * @param wrappers 配置路由组件的包装组件,通过包装组件可以为当前的路由组件组合进更多的功能。 比如,可以用于路由级别的权限校验 |
| | | * @param name 配置路由的标题,默认读取国际化文件 menu.ts 中 menu.xxxx 的值,如配置 name 为 login,则读取 menu.ts 中 menu.login 的取值作为标题 |
| | | * @param icon 配置路由的图标,取值参考 https://ant.design/components/icon-cn, 注意去除风格后缀和大小写,如想要配置图标为 <StepBackwardOutlined /> 则取值应为 stepBackward 或 StepBackward,如想要配置图标为 <UserOutlined /> 则取值应为 user 或者 User |
| | | * @doc https://umijs.org/docs/guides/routes |
| | | */ |
| | | export default [ |
| | | { |
| | | path: '/Welcome', |
| | | routes: [ |
| | | { |
| | | name: 'Welcome', |
| | | path: '/Welcome', |
| | | hideInMenu: true, |
| | | component: './system/welco', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | path: '/login', |
| | | layout: false, |
| | | routes: [ |
| | | { |
| | | name: 'login', |
| | | path: '/login', |
| | | component: './Login', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | path: '/setting', |
| | | layout: false, |
| | | name:'系统设置', |
| | | routes: [ |
| | | { |
| | | name: '职位管理', |
| | | path: '/career', |
| | | component: './setting/career', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | path: '/work-order', |
| | | layout: false, |
| | | name:'工单事项管理', |
| | | routes: [ |
| | | { |
| | | name: '工单事项配置', |
| | | path: '/configuration', |
| | | component: './work-order-settimg/configuration', |
| | | }, |
| | | ], |
| | | }, |
| | | |
| | | ]; |
New file |
| | |
| | | import { configUmiAlias, createConfig } from '@umijs/max/test'; |
| | | |
| | | export default async () => { |
| | | const config = await configUmiAlias({ |
| | | ...createConfig({ |
| | | target: 'browser', |
| | | }), |
| | | }); |
| | | |
| | | |
| | | return { |
| | | ...config, |
| | | testEnvironmentOptions: { |
| | | ...(config?.testEnvironmentOptions || {}), |
| | | url: 'http://localhost:8000', |
| | | }, |
| | | setupFiles: [...(config.setupFiles || []), './tests/setupTests.jsx'], |
| | | globals: { |
| | | ...config.globals, |
| | | localStorage: null, |
| | | }, |
| | | }; |
| | | }; |
New file |
| | |
| | | { |
| | | "compilerOptions": { |
| | | "jsx": "react-jsx", |
| | | "emitDecoratorMetadata": true, |
| | | "experimentalDecorators": true, |
| | | "baseUrl": ".", |
| | | "paths": { |
| | | "@/*": ["./src/*"] |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "name": "ant-design-pro", |
| | | "version": "6.0.0", |
| | | "private": true, |
| | | "description": "An out-of-box UI solution for enterprise applications", |
| | | "scripts": { |
| | | "start:dev": "cross-env PORT=8888 REACT_APP_ENV=dev MOCK=none UMI_ENV=dev max dev", |
| | | "start:test": "cross-env PORT=8888 REACT_APP_ENV=test MOCK=none UMI_ENV=dev max dev", |
| | | "start:prod": "cross-env PORT=8888 REACT_APP_ENV=prod MOCK=none UMI_ENV=prod max dev", |
| | | "build:dev": "cross-env REACT_APP_ENV=dev MOCK=none UMI_ENV=dev max build", |
| | | "build:test": "cross-env REACT_APP_ENV=test MOCK=none UMI_ENV=test max build", |
| | | "build:prod": "cross-env REACT_APP_ENV=prod MOCK=none UMI_ENV=prod max build", |
| | | "analyze": "cross-env ANALYZE=1 max build", |
| | | "deploy": "npm run build && npm run gh-pages", |
| | | "gh-pages": "gh-pages -d dist", |
| | | "postinstall": "max setup", |
| | | "jest": "jest", |
| | | "openapi": "max openapi", |
| | | "prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", |
| | | "preview": "npm run build && max preview --port 8000", |
| | | "record": "cross-env NODE_ENV=development REACT_APP_ENV=test max record --scene=login", |
| | | "serve": "umi-serve", |
| | | "test": "jest", |
| | | "test:coverage": "npm run jest -- --coverage", |
| | | "test:update": "npm run jest -- -u", |
| | | "tsc": "tsc --noEmit" |
| | | }, |
| | | "browserslist": [ |
| | | "> 1%", |
| | | "last 2 versions", |
| | | "not ie <= 10" |
| | | ], |
| | | "dependencies": { |
| | | "@ant-design/charts": "^2.1.2", |
| | | "@ant-design/icons": "^4.8.0", |
| | | "@ant-design/plots": "^2.2.6", |
| | | "@ant-design/pro-components": "^2.6.35", |
| | | "@ant-design/pro-form": "^2.31.2", |
| | | "@ant-design/use-emotion-css": "1.0.4", |
| | | "@umijs/route-utils": "^2.2.2", |
| | | "antd": "^5.2.2", |
| | | "braft-editor": "^2.3.9", |
| | | "classnames": "^2.3.2", |
| | | "crypto-js": "^4.2.0", |
| | | "moment": "^2.29.4", |
| | | "omit.js": "^2.0.2", |
| | | "rc-menu": "^9.8.2", |
| | | "rc-util": "^5.27.2", |
| | | "react": "^18.2.0", |
| | | "react-captcha-code": "^1.0.7", |
| | | "react-dev-inspector": "^1.8.4", |
| | | "react-dom": "^18.2.0", |
| | | "react-helmet-async": "^1.3.0" |
| | | }, |
| | | "devDependencies": { |
| | | "@ant-design/pro-cli": "^2.1.5", |
| | | "@testing-library/react": "^13.4.0", |
| | | "@types/classnames": "^2.3.1", |
| | | "@types/express": "^4.17.17", |
| | | "@types/history": "^4.7.11", |
| | | "@types/jest": "^29.4.0", |
| | | "@types/lodash": "^4.14.191", |
| | | "@types/react": "^18.0.28", |
| | | "@types/react-dom": "^18.0.11", |
| | | "@types/react-helmet": "^6.1.6", |
| | | "@umijs/fabric": "^2.14.1", |
| | | "@umijs/max": "^4.0.52", |
| | | "cross-env": "^7.0.3", |
| | | "express": "^4.18.2", |
| | | "gh-pages": "^3.2.3", |
| | | "jest": "^29.4.3", |
| | | "jest-environment-jsdom": "^29.4.3", |
| | | "mockjs": "^1.1.0", |
| | | "prettier": "^2.8.4", |
| | | "swagger-ui-dist": "^4.15.5", |
| | | "ts-node": "^10.9.1", |
| | | "typescript": "^4.9.5", |
| | | "umi-presets-pro": "^2.0.2" |
| | | }, |
| | | "engines": { |
| | | "node": ">=12.0.0" |
| | | } |
| | | } |
New file |
| | |
| | | preview.pro.ant.design |
copy from uni_modules/uview-ui/libs/css/h5.scss
copy to management/public/font.css
New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" version="1.1" viewBox="0 0 200 200"><title>Group 28 Copy 5</title><desc>Created with Sketch.</desc><defs><linearGradient id="linearGradient-1" x1="62.102%" x2="108.197%" y1="0%" y2="37.864%"><stop offset="0%" stop-color="#4285EB"/><stop offset="100%" stop-color="#2EC7FF"/></linearGradient><linearGradient id="linearGradient-2" x1="69.644%" x2="54.043%" y1="0%" y2="108.457%"><stop offset="0%" stop-color="#29CDFF"/><stop offset="37.86%" stop-color="#148EFF"/><stop offset="100%" stop-color="#0A60FF"/></linearGradient><linearGradient id="linearGradient-3" x1="69.691%" x2="16.723%" y1="-12.974%" y2="117.391%"><stop offset="0%" stop-color="#FA816E"/><stop offset="41.473%" stop-color="#F74A5C"/><stop offset="100%" stop-color="#F51D2C"/></linearGradient><linearGradient id="linearGradient-4" x1="68.128%" x2="30.44%" y1="-35.691%" y2="114.943%"><stop offset="0%" stop-color="#FA8E7D"/><stop offset="51.264%" stop-color="#F74A5C"/><stop offset="100%" stop-color="#F51D2C"/></linearGradient></defs><g id="Page-1" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><g id="logo" transform="translate(-20.000000, -20.000000)"><g id="Group-28-Copy-5" transform="translate(20.000000, 20.000000)"><g id="Group-27-Copy-3"><g id="Group-25" fill-rule="nonzero"><g id="2"><path id="Shape" fill="url(#linearGradient-1)" d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C99.2571609,26.9692191 101.032305,26.9692191 102.20193,28.1378823 L129.985225,55.8983314 C134.193707,60.1033528 141.017005,60.1033528 145.225487,55.8983314 C149.433969,51.69331 149.433969,44.8756232 145.225487,40.6706018 L108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z"/><path id="Shape" fill="url(#linearGradient-2)" d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C100.999864,25.6271836 105.751642,20.541824 112.729652,19.3524487 C117.915585,18.4685261 123.585219,20.4140239 129.738554,25.1889424 C125.624663,21.0784292 118.571995,14.0340304 108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z"/></g><path id="Shape" fill="url(#linearGradient-3)" d="M153.685633,135.854579 C157.894115,140.0596 164.717412,140.0596 168.925894,135.854579 L195.959977,108.842726 C200.659183,104.147384 200.659183,96.5636133 195.960527,91.8688194 L168.690777,64.7181159 C164.472332,60.5180858 157.646868,60.5241425 153.435895,64.7316526 C149.227413,68.936674 149.227413,75.7543607 153.435895,79.9593821 L171.854035,98.3623765 C173.02366,99.5310396 173.02366,101.304724 171.854035,102.473387 L153.685633,120.626849 C149.47715,124.83187 149.47715,131.649557 153.685633,135.854579 Z"/></g><ellipse id="Combined-Shape" cx="100.519" cy="100.437" fill="url(#linearGradient-4)" rx="23.6" ry="23.581"/></g></g></g></g></svg> |
New file |
| | |
| | | <svg width="42" height="42" xmlns="http://www.w3.org/2000/svg"> |
| | | <g> |
| | | <path fill="#070707" d="m6.717392,13.773912l5.6,0c2.8,0 4.7,1.9 4.7,4.7c0,2.8 -2,4.7 -4.9,4.7l-2.5,0l0,4.3l-2.9,0l0,-13.7zm2.9,2.2l0,4.9l1.9,0c1.6,0 2.6,-0.9 2.6,-2.4c0,-1.6 -0.9,-2.4 -2.6,-2.4l-1.9,0l0,-0.1zm8.9,11.5l2.7,0l0,-5.7c0,-1.4 0.8,-2.3 2.2,-2.3c0.4,0 0.8,0.1 1,0.2l0,-2.4c-0.2,-0.1 -0.5,-0.1 -0.8,-0.1c-1.2,0 -2.1,0.7 -2.4,2l-0.1,0l0,-1.9l-2.7,0l0,10.2l0.1,0zm11.7,0.1c-3.1,0 -5,-2 -5,-5.3c0,-3.3 2,-5.3 5,-5.3s5,2 5,5.3c0,3.4 -1.9,5.3 -5,5.3zm0,-2.1c1.4,0 2.2,-1.1 2.2,-3.2c0,-2 -0.8,-3.2 -2.2,-3.2c-1.4,0 -2.2,1.2 -2.2,3.2c0,2.1 0.8,3.2 2.2,3.2z" class="st0" id="Ant-Design-Pro"/> |
| | | </g> |
| | | </svg> |
New file |
| | |
| | | /** |
| | | * loading 占位 |
| | | * 解决首次加载时白屏的问题 |
| | | */ |
| | | (function () { |
| | | const _root = document.querySelector('#root'); |
| | | if (_root && _root.innerHTML === '') { |
| | | _root.innerHTML = ` |
| | | <style> |
| | | html, |
| | | body, |
| | | #root { |
| | | height: 100%; |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | #root { |
| | | background-repeat: no-repeat; |
| | | background-size: 100% auto; |
| | | } |
| | | |
| | | .loading-title { |
| | | font-size: 1.1rem; |
| | | } |
| | | |
| | | .loading-sub-title { |
| | | margin-top: 20px; |
| | | font-size: 1rem; |
| | | color: #888; |
| | | } |
| | | |
| | | .page-loading-warp { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | padding: 26px; |
| | | } |
| | | .ant-spin { |
| | | position: absolute; |
| | | display: none; |
| | | -webkit-box-sizing: border-box; |
| | | box-sizing: border-box; |
| | | margin: 0; |
| | | padding: 0; |
| | | color: rgba(0, 0, 0, 0.65); |
| | | font-size: 14px; |
| | | font-variant: tabular-nums; |
| | | line-height: 1.5; |
| | | text-align: center; |
| | | list-style: none; |
| | | opacity: 0; |
| | | -webkit-transition: -webkit-transform 0.3s |
| | | cubic-bezier(0.78, 0.14, 0.15, 0.86); |
| | | transition: -webkit-transform 0.3s |
| | | cubic-bezier(0.78, 0.14, 0.15, 0.86); |
| | | transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); |
| | | transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), |
| | | -webkit-transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); |
| | | -webkit-font-feature-settings: "tnum"; |
| | | font-feature-settings: "tnum"; |
| | | } |
| | | |
| | | .ant-spin-spinning { |
| | | position: static; |
| | | display: inline-block; |
| | | opacity: 1; |
| | | } |
| | | |
| | | .ant-spin-dot { |
| | | position: relative; |
| | | display: inline-block; |
| | | width: 20px; |
| | | height: 20px; |
| | | font-size: 20px; |
| | | } |
| | | |
| | | .ant-spin-dot-item { |
| | | position: absolute; |
| | | display: block; |
| | | width: 9px; |
| | | height: 9px; |
| | | border-radius: 100%; |
| | | -webkit-transform: scale(0.75); |
| | | -ms-transform: scale(0.75); |
| | | transform: scale(0.75); |
| | | -webkit-transform-origin: 50% 50%; |
| | | -ms-transform-origin: 50% 50%; |
| | | transform-origin: 50% 50%; |
| | | opacity: 0.3; |
| | | -webkit-animation: antspinmove 1s infinite linear alternate; |
| | | animation: antSpinMove 1s infinite linear alternate; |
| | | } |
| | | |
| | | .ant-spin-dot-item:nth-child(1) { |
| | | top: 0; |
| | | left: 0; |
| | | } |
| | | |
| | | .ant-spin-dot-item:nth-child(2) { |
| | | top: 0; |
| | | right: 0; |
| | | -webkit-animation-delay: 0.4s; |
| | | animation-delay: 0.4s; |
| | | } |
| | | |
| | | .ant-spin-dot-item:nth-child(3) { |
| | | right: 0; |
| | | bottom: 0; |
| | | -webkit-animation-delay: 0.8s; |
| | | animation-delay: 0.8s; |
| | | } |
| | | |
| | | .ant-spin-dot-item:nth-child(4) { |
| | | bottom: 0; |
| | | left: 0; |
| | | -webkit-animation-delay: 1.2s; |
| | | animation-delay: 1.2s; |
| | | } |
| | | |
| | | .ant-spin-dot-spin { |
| | | -webkit-transform: rotate(45deg); |
| | | -ms-transform: rotate(45deg); |
| | | transform: rotate(45deg); |
| | | -webkit-animation: antrotate 1.2s infinite linear; |
| | | animation: antRotate 1.2s infinite linear; |
| | | } |
| | | |
| | | .ant-spin-lg .ant-spin-dot { |
| | | width: 32px; |
| | | height: 32px; |
| | | font-size: 32px; |
| | | } |
| | | |
| | | .ant-spin-lg .ant-spin-dot i { |
| | | width: 14px; |
| | | height: 14px; |
| | | } |
| | | |
| | | @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { |
| | | .ant-spin-blur { |
| | | background: #fff; |
| | | opacity: 0.5; |
| | | } |
| | | } |
| | | |
| | | @-webkit-keyframes antSpinMove { |
| | | to { |
| | | opacity: 1; |
| | | } |
| | | } |
| | | |
| | | @keyframes antSpinMove { |
| | | to { |
| | | opacity: 1; |
| | | } |
| | | } |
| | | |
| | | @-webkit-keyframes antRotate { |
| | | to { |
| | | -webkit-transform: rotate(405deg); |
| | | transform: rotate(405deg); |
| | | } |
| | | } |
| | | |
| | | @keyframes antRotate { |
| | | to { |
| | | -webkit-transform: rotate(405deg); |
| | | transform: rotate(405deg); |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | <div style=" |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | height: 100%; |
| | | min-height: 362px; |
| | | "> |
| | | <div class="page-loading-warp"> |
| | | <div class="ant-spin ant-spin-lg ant-spin-spinning"> |
| | | <span class="ant-spin-dot ant-spin-dot-spin"> |
| | | <i class="ant-spin-dot-item"></i> |
| | | <i class="ant-spin-dot-item"></i> |
| | | <i class="ant-spin-dot-item"></i> |
| | | <i class="ant-spin-dot-item"></i> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | <div class="loading-title"> |
| | | 正在加载资源 |
| | | </div> |
| | | <div class="loading-sub-title"> |
| | | 初次加载资源可能需要较多时间 请耐心等待 |
| | | </div> |
| | | </div> |
| | | `; |
| | | } |
| | | })(); |
New file |
| | |
| | | /** |
| | | * @see https://umijs.org/zh-CN/plugins/plugin-access |
| | | * */ |
| | | export default function access(initialState) { |
| | | const { permission } = initialState ?? {}; |
| | | return { ...permission }; |
| | | } |
New file |
| | |
| | | import type { Settings as LayoutSettings } from '@ant-design/pro-components'; |
| | | import { SettingDrawer } from '@ant-design/pro-components'; |
| | | import type { RunTimeLayoutConfig } from '@umijs/max'; |
| | | import { history } from '@umijs/max'; |
| | | import defaultSettings from '../config/defaultSettings'; |
| | | import { AvatarDropdown, AvatarName } from './components/RightContent/AvatarDropdown'; |
| | | import { errorConfig } from './requestErrorConfig'; |
| | | const loginPath = '/login'; |
| | | import logo from '../public/logo/logo.png' |
| | | import '../public/font.css' |
| | | |
| | | |
| | | /** |
| | | * @see https://umijs.org/zh-CN/plugins/plugin-initial-state |
| | | * */ |
| | | export async function getInitialState(): Promise<{ |
| | | settings?: Partial<LayoutSettings>; |
| | | currentUser?: {}; |
| | | permission?: Array<Permissions>; |
| | | loading?: boolean; |
| | | }> { |
| | | |
| | | return { |
| | | permission: JSON.parse(localStorage.getItem('access') || '') || [], |
| | | currentUser: JSON.parse(localStorage.getItem('userInfo') || '') || {}, |
| | | settings: { ...defaultSettings, fixedHeader: true } as Partial<LayoutSettings>, |
| | | }; |
| | | } |
| | | |
| | | // ProLayout 支持的api https://procomponents.ant.design/components/layout |
| | | export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => { |
| | | |
| | | return { |
| | | siderWidth: '210', |
| | | token: { |
| | | |
| | | }, |
| | | avatarProps: { |
| | | title: <AvatarName />, |
| | | render: (_, avatarChildren) => { |
| | | return <AvatarDropdown>{avatarChildren}</AvatarDropdown>; |
| | | }, |
| | | }, |
| | | waterMarkProps: { |
| | | content: false, |
| | | }, |
| | | onPageChange: () => { |
| | | const { location: { pathname } } = history; |
| | | // 如果没有登录,重定向到 login |
| | | if (!initialState?.currentUser && location.pathname !== loginPath) { |
| | | history.push(loginPath); |
| | | return |
| | | } |
| | | }, |
| | | // 自定义 403 页面 |
| | | unAccessible: <div></div>, |
| | | // 自定义 404 页面 |
| | | noFound: <div></div>, |
| | | // 增加一个 loading 的状态 |
| | | childrenRender: (children) => { |
| | | return ( |
| | | <> |
| | | {children} |
| | | <SettingDrawer |
| | | disableUrlParams |
| | | enableDarkTheme |
| | | settings={initialState?.settings} |
| | | onSettingChange={(settings) => { |
| | | setInitialState((preInitialState) => ({ |
| | | ...preInitialState, |
| | | settings, |
| | | })); |
| | | }} |
| | | /> |
| | | </> |
| | | ); |
| | | }, |
| | | ...initialState?.settings, |
| | | logo |
| | | }; |
| | | }; |
| | | |
| | | /** |
| | | * @name request 配置,可以配置错误处理 |
| | | * 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。 |
| | | * @doc https://umijs.org/docs/max/request#配置 |
| | | */ |
| | | export const request = { |
| | | ...errorConfig, |
| | | }; |
New file |
| | |
| | | // 引入编辑器组件 |
| | | import BraftEditor from 'braft-editor' |
| | | // 引入编辑器样式 |
| | | import 'braft-editor/dist/index.css' |
| | | import { upload } from './service'; |
| | | // 引入样式 |
| | | import styles from './style.less' |
| | | |
| | | const BraftEditorCom = (props) => { |
| | | |
| | | // 上传方法 |
| | | const myUploadFn = async params => { |
| | | const file = params.file |
| | | const formData = new FormData(); |
| | | formData.append('file', file); |
| | | upload(formData).then(res => { |
| | | if (res) { |
| | | params.progress(100); |
| | | params.success({ |
| | | url: res.msg, |
| | | meta: { |
| | | id: params.id, |
| | | title: '图片', |
| | | loop: false, // 指定音视频是否循环播放 |
| | | autoPlay: false, // 指定音视频是否自动播放 |
| | | controls: false, // 指定音视频是否显示控制栏 |
| | | poster: '', // 指定视频播放器的封面 |
| | | }, |
| | | }); |
| | | } |
| | | }) |
| | | }; |
| | | const { data, resultCallback, readOnly, } = props; |
| | | |
| | | let result = data == '' ? BraftEditor.createEditorState(null) : BraftEditor.createEditorState(data); |
| | | return ( |
| | | <div className={styles.box}> |
| | | <BraftEditor |
| | | value={result} |
| | | readOnly={readOnly || false} |
| | | onChange={editorState => resultCallback(editorState.toHTML())} |
| | | media={{ uploadFn: myUploadFn }} |
| | | /> |
| | | </div> |
| | | ) |
| | | } |
| | | |
| | | export default BraftEditorCom |
New file |
| | |
| | | import { request } from '@umijs/max'; |
| | | |
| | | export async function upload(data) { |
| | | return request(`/account/file/upload`, { |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
New file |
| | |
| | | .box{ |
| | | border: 1px solid #cccccc; |
| | | background-color: #fff; |
| | | } |
New file |
| | |
| | | import { Dropdown } from 'antd'; |
| | | import type { DropDownProps } from 'antd/es/dropdown'; |
| | | import React from 'react'; |
| | | import { useEmotionCss } from '@ant-design/use-emotion-css'; |
| | | import classNames from 'classnames'; |
| | | |
| | | export type HeaderDropdownProps = { |
| | | overlayClassName?: string; |
| | | placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomCenter'; |
| | | } & Omit<DropDownProps, 'overlay'>; |
| | | |
| | | const HeaderDropdown: React.FC<HeaderDropdownProps> = ({ overlayClassName: cls, ...restProps }) => { |
| | | const className = useEmotionCss(({ token }) => { |
| | | return { |
| | | [`@media screen and (max-width: ${token.screenXS})`]: { |
| | | width: '100%', |
| | | }, |
| | | }; |
| | | }); |
| | | return <Dropdown overlayClassName={classNames(className, cls)} {...restProps} />; |
| | | }; |
| | | |
| | | export default HeaderDropdown; |
New file |
| | |
| | | import { outLogin } from '@/services/ant-design-pro/api'; |
| | | import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons'; |
| | | import { useEmotionCss } from '@ant-design/use-emotion-css'; |
| | | import { history, useModel } from '@umijs/max'; |
| | | import { Spin } from 'antd'; |
| | | import { stringify } from 'querystring'; |
| | | import type { MenuInfo } from 'rc-menu/lib/interface'; |
| | | import React, { useCallback } from 'react'; |
| | | import { flushSync } from 'react-dom'; |
| | | import HeaderDropdown from '../HeaderDropdown'; |
| | | |
| | | export type GlobalHeaderRightProps = { |
| | | menu?: boolean; |
| | | children?: React.ReactNode; |
| | | }; |
| | | |
| | | export const AvatarName = () => { |
| | | const { initialState } = useModel('@@initialState'); |
| | | // |
| | | |
| | | const { currentUser } = initialState || {}; |
| | | return <span className="anticon">{currentUser?.userName || '超级管理员'}</span>; |
| | | }; |
| | | |
| | | export const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu, children }) => { |
| | | /** |
| | | * 退出登录,并且将当前的 url 保存 |
| | | */ |
| | | const loginOut = async () => { |
| | | // await outLogin(); |
| | | const { search, pathname } = window.location; |
| | | const urlParams = new URL(window.location.href).searchParams; |
| | | /** 此方法会跳转到 redirect 参数所在的位置 */ |
| | | const redirect = urlParams.get('redirect'); |
| | | // Note: There may be security issues, please note |
| | | if (window.location.pathname !== '/login' && !redirect) { |
| | | history.replace({ |
| | | pathname: '/login', |
| | | search: stringify({ |
| | | redirect: pathname + search, |
| | | }), |
| | | }); |
| | | } |
| | | }; |
| | | const actionClassName = useEmotionCss(({ token }) => { |
| | | return { |
| | | display: 'flex', |
| | | height: '48px', |
| | | marginLeft: 'auto', |
| | | overflow: 'hidden', |
| | | alignItems: 'center', |
| | | padding: '0 8px', |
| | | cursor: 'pointer', |
| | | borderRadius: token.borderRadius, |
| | | '&:hover': { |
| | | backgroundColor: token.colorBgTextHover, |
| | | }, |
| | | }; |
| | | }); |
| | | const { initialState, setInitialState } = useModel('@@initialState'); |
| | | |
| | | const onMenuClick = useCallback( |
| | | (event: MenuInfo) => { |
| | | const { key } = event; |
| | | if (key === 'logout') { |
| | | localStorage.clear(); |
| | | flushSync(() => { |
| | | setInitialState((s) => ({ ...s, currentUser: undefined })); |
| | | }); |
| | | loginOut(); |
| | | return; |
| | | } |
| | | history.push(`/account/${key}`); |
| | | }, |
| | | [setInitialState], |
| | | ); |
| | | |
| | | const loading = ( |
| | | <span className={actionClassName}> |
| | | <Spin |
| | | size="small" |
| | | style={{ |
| | | marginLeft: 8, |
| | | marginRight: 8, |
| | | }} |
| | | /> |
| | | </span> |
| | | ); |
| | | |
| | | if (!initialState) { |
| | | return loading; |
| | | } |
| | | |
| | | const { currentUser } = initialState; |
| | | |
| | | if (!currentUser || !currentUser.userName) { |
| | | return loading; |
| | | } |
| | | |
| | | const menuItems = [ |
| | | ...(menu |
| | | ? [ |
| | | { |
| | | key: 'center', |
| | | icon: <UserOutlined />, |
| | | label: '个人中心', |
| | | }, |
| | | { |
| | | key: 'settings', |
| | | icon: <SettingOutlined />, |
| | | label: '个人设置', |
| | | }, |
| | | { |
| | | type: 'divider' as const, |
| | | }, |
| | | ] |
| | | : []), |
| | | { |
| | | key: 'logout', |
| | | icon: <LogoutOutlined />, |
| | | label: '退出登录', |
| | | }, |
| | | ]; |
| | | |
| | | return ( |
| | | <HeaderDropdown |
| | | menu={{ |
| | | selectedKeys: [], |
| | | onClick: onMenuClick, |
| | | items: menuItems, |
| | | }} |
| | | > |
| | | {children} |
| | | </HeaderDropdown> |
| | | ); |
| | | }; |
New file |
| | |
| | | import { QuestionCircleOutlined } from '@ant-design/icons'; |
| | | import { SelectLang as UmiSelectLang } from '@umijs/max'; |
| | | import React from 'react'; |
| | | |
| | | export type SiderTheme = 'light' | 'dark'; |
| | | |
| | | export const SelectLang = () => { |
| | | return ( |
| | | <UmiSelectLang |
| | | style={{ |
| | | padding: 4, |
| | | }} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | export const Question = () => { |
| | | return ( |
| | | <div |
| | | style={{ |
| | | display: 'flex', |
| | | height: 26, |
| | | }} |
| | | onClick={() => { |
| | | window.open('https://pro.ant.design/docs/getting-started'); |
| | | }} |
| | | > |
| | | {/* <QuestionCircleOutlined /> */} |
| | | </div> |
| | | ); |
| | | }; |
New file |
| | |
| | | html, |
| | | body, |
| | | #root { |
| | | height: 100%; |
| | | margin: 0; |
| | | padding: 0; |
| | | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, |
| | | 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', |
| | | 'Noto Color Emoji'; |
| | | } |
| | | |
| | | .colorWeak { |
| | | filter: invert(80%); |
| | | } |
| | | |
| | | .ant-layout { |
| | | min-height: 100vh; |
| | | } |
| | | |
| | | .ant-pro-sider.ant-layout-sider.ant-pro-sider-fixed { |
| | | left: unset; |
| | | } |
| | | |
| | | .ant-pro-layout .ant-pro-sider.ant-pro-sider-fixed-mix { |
| | | height: calc(100% - 74px); |
| | | inset-block-start: 74px; |
| | | } |
| | | |
| | | .ant-layout-has-sider>div:nth-child(1) { |
| | | max-width: 210px !important; |
| | | min-width: 64px !important; |
| | | } |
| | | |
| | | .ant-layout-header { |
| | | height: 74px !important; |
| | | } |
| | | |
| | | .ant-pro-global-header { |
| | | height: 74px !important; |
| | | } |
| | | |
| | | canvas { |
| | | display: block; |
| | | } |
| | | |
| | | body { |
| | | text-rendering: optimizeLegibility; |
| | | -webkit-font-smoothing: antialiased; |
| | | -moz-osx-font-smoothing: grayscale; |
| | | } |
| | | |
| | | ul, |
| | | ol { |
| | | list-style: none; |
| | | } |
| | | |
| | | @media (max-width: 768px) { |
| | | .ant-table { |
| | | width: 100%; |
| | | overflow-x: auto; |
| | | |
| | | &-thead>tr, |
| | | &-tbody>tr { |
| | | |
| | | >th, |
| | | >td { |
| | | white-space: pre; |
| | | |
| | | >span { |
| | | display: block; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .del-confirm { |
| | | .del-icon { |
| | | margin-right: 5px; |
| | | width: 22px; |
| | | height: 22px; |
| | | background-color: rgba(233, 157, 66, 1); |
| | | color: #fff; |
| | | border-radius: 50%; |
| | | align-content: center; |
| | | text-align: center; |
| | | } |
| | | |
| | | .ant-modal-confirm-btns { |
| | | .ant-btn-default:last-child { |
| | | border-color: #1677ff !important; |
| | | color: #fff !important; |
| | | background-color: #1677ff !important; |
| | | } |
| | | |
| | | .ant-btn-default { |
| | | color: #000 !important; |
| | | border-color: #d9d9d9 !important; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | import { useIntl } from '@umijs/max'; |
| | | import { Button, message, notification } from 'antd'; |
| | | import defaultSettings from '../config/defaultSettings'; |
| | | |
| | | const { pwa } = defaultSettings; |
| | | const isHttps = document.location.protocol === 'https:'; |
| | | |
| | | const clearCache = () => { |
| | | // remove all caches |
| | | if (window.caches) { |
| | | caches |
| | | .keys() |
| | | .then((keys) => { |
| | | keys.forEach((key) => { |
| | | caches.delete(key); |
| | | }); |
| | | }) |
| | | } |
| | | }; |
| | | |
| | | // if pwa is true |
| | | if (pwa) { |
| | | // Notify user if offline now |
| | | window.addEventListener('sw.offline', () => { |
| | | message.warning(useIntl().formatMessage({ id: 'app.pwa.offline' })); |
| | | }); |
| | | |
| | | // Pop up a prompt on the page asking the user if they want to use the latest version |
| | | window.addEventListener('sw.updated', (event: Event) => { |
| | | const e = event as CustomEvent; |
| | | const reloadSW = async () => { |
| | | // Check if there is sw whose state is waiting in ServiceWorkerRegistration |
| | | // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration |
| | | const worker = e.detail && e.detail.waiting; |
| | | if (!worker) { |
| | | return true; |
| | | } |
| | | // Send skip-waiting event to waiting SW with MessageChannel |
| | | await new Promise((resolve, reject) => { |
| | | const channel = new MessageChannel(); |
| | | channel.port1.onmessage = (msgEvent) => { |
| | | if (msgEvent.data.error) { |
| | | reject(msgEvent.data.error); |
| | | } else { |
| | | resolve(msgEvent.data); |
| | | } |
| | | }; |
| | | worker.postMessage({ type: 'skip-waiting' }, [channel.port2]); |
| | | }); |
| | | |
| | | clearCache(); |
| | | window.location.reload(); |
| | | return true; |
| | | }; |
| | | const key = `open${Date.now()}`; |
| | | const btn = ( |
| | | <Button |
| | | type="primary" |
| | | onClick={() => { |
| | | notification.destroy(key); |
| | | reloadSW(); |
| | | }} |
| | | > |
| | | {useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.ok' })} |
| | | </Button> |
| | | ); |
| | | notification.open({ |
| | | message: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated' }), |
| | | description: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.hint' }), |
| | | btn, |
| | | key, |
| | | onClose: async () => null, |
| | | }); |
| | | }); |
| | | } else if ('serviceWorker' in navigator && isHttps) { |
| | | // unregister service worker |
| | | const { serviceWorker } = navigator; |
| | | if (serviceWorker.getRegistrations) { |
| | | serviceWorker.getRegistrations().then((sws) => { |
| | | sws.forEach((sw) => { |
| | | sw.unregister(); |
| | | }); |
| | | }); |
| | | } |
| | | serviceWorker.getRegistration().then((sw) => { |
| | | if (sw) sw.unregister(); |
| | | }); |
| | | |
| | | clearCache(); |
| | | } |
New file |
| | |
| | | import component from './bn-BD/component'; |
| | | import globalHeader from './bn-BD/globalHeader'; |
| | | import menu from './bn-BD/menu'; |
| | | import pages from './bn-BD/pages'; |
| | | import pwa from './bn-BD/pwa'; |
| | | import settingDrawer from './bn-BD/settingDrawer'; |
| | | import settings from './bn-BD/settings'; |
| | | |
| | | export default { |
| | | 'navBar.lang': 'ভাষা', |
| | | 'layout.user.link.help': 'সহায়তা', |
| | | 'layout.user.link.privacy': 'গোপনীয়তা', |
| | | 'layout.user.link.terms': 'শর্তাদি', |
| | | 'app.copyright.produced': 'প্রযোজনা করেছেন অ্যান্ট ফিনান্সিয়াল এক্সপেরিয়েন্স ডিপার্টমেন্ট', |
| | | 'app.preview.down.block': 'আপনার স্থানীয় প্রকল্পে এই পৃষ্ঠাটি ডাউনলোড করুন', |
| | | 'app.welcome.link.fetch-blocks': 'সমস্ত ব্লক পান', |
| | | 'app.welcome.link.block-list': |
| | | '`block` ডেভেলপমেন্ট এর উপর ভিত্তি করে দ্রুত স্ট্যান্ডার্ড, পৃষ্ঠাসমূহ তৈরি করুন।', |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | ...pages, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': 'বিস্তৃত', |
| | | 'component.tagSelect.collapse': 'সঙ্কুচিত', |
| | | 'component.tagSelect.all': 'সব', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': 'অনুসন্ধান করুন', |
| | | 'component.globalHeader.search.example1': 'অনুসন্ধান উদাহরণ ১', |
| | | 'component.globalHeader.search.example2': 'অনুসন্ধান উদাহরণ ২', |
| | | 'component.globalHeader.search.example3': 'অনুসন্ধান উদাহরণ ৩', |
| | | 'component.globalHeader.help': 'সহায়তা', |
| | | 'component.globalHeader.notification': 'বিজ্ঞপ্তি', |
| | | 'component.globalHeader.notification.empty': 'আপনি সমস্ত বিজ্ঞপ্তি দেখেছেন।', |
| | | 'component.globalHeader.message': 'বার্তা', |
| | | 'component.globalHeader.message.empty': 'আপনি সমস্ত বার্তা দেখেছেন।', |
| | | 'component.globalHeader.event': 'ঘটনা', |
| | | 'component.globalHeader.event.empty': 'আপনি সমস্ত ইভেন্ট দেখেছেন।', |
| | | 'component.noticeIcon.clear': 'সাফ', |
| | | 'component.noticeIcon.cleared': 'সাফ করা হয়েছে', |
| | | 'component.noticeIcon.empty': 'বিজ্ঞপ্তি নেই', |
| | | 'component.noticeIcon.view-more': 'আরো দেখুন', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': 'স্বাগতম', |
| | | 'menu.more-blocks': 'আরও ব্লক', |
| | | 'menu.home': 'নীড়', |
| | | 'menu.admin': 'অ্যাডমিন', |
| | | 'menu.admin.sub-page': 'উপ-পৃষ্ঠা', |
| | | 'menu.login': 'প্রবেশ', |
| | | 'menu.register': 'নিবন্ধন', |
| | | 'menu.register-result': 'নিবন্ধনে ফলাফল', |
| | | 'menu.dashboard': 'ড্যাশবোর্ড', |
| | | 'menu.dashboard.analysis': 'বিশ্লেষণ', |
| | | 'menu.dashboard.monitor': 'নিরীক্ষণ', |
| | | 'menu.dashboard.workplace': 'কর্মক্ষেত্র', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': 'ফর্ম', |
| | | 'menu.form.basic-form': 'বেসিক ফর্ম', |
| | | 'menu.form.step-form': 'পদক্ষেপ ফর্ম', |
| | | 'menu.form.step-form.info': 'পদক্ষেপ ফর্ম (স্থানান্তর তথ্য লিখুন)', |
| | | 'menu.form.step-form.confirm': 'পদক্ষেপ ফর্ম (স্থানান্তর তথ্য নিশ্চিত করুন)', |
| | | 'menu.form.step-form.result': 'পদক্ষেপ ফর্ম (সমাপ্ত)', |
| | | 'menu.form.advanced-form': 'উন্নত ফর্ম', |
| | | 'menu.list': 'তালিকা', |
| | | 'menu.list.table-list': 'অনুসন্ধানের টেবিল', |
| | | 'menu.list.basic-list': 'বেসিক তালিকা', |
| | | 'menu.list.card-list': 'কার্ডের তালিকা', |
| | | 'menu.list.search-list': 'অনুসন্ধানের তালিকা', |
| | | 'menu.list.search-list.articles': 'অনুসন্ধানের তালিকা (নিবন্ধসমূহ)', |
| | | 'menu.list.search-list.projects': 'অনুসন্ধানের তালিকা (প্রকল্পগুলি)', |
| | | 'menu.list.search-list.applications': 'অনুসন্ধানের তালিকা (অ্যাপ্লিকেশন)', |
| | | 'menu.profile': 'প্রোফাইল', |
| | | 'menu.profile.basic': 'বেসিক প্রোফাইল', |
| | | 'menu.profile.advanced': 'উন্নত প্রোফাইল', |
| | | 'menu.result': 'ফলাফল', |
| | | 'menu.result.success': 'সাফল্য', |
| | | 'menu.result.fail': 'ব্যর্থ', |
| | | 'menu.exception': 'ব্যতিক্রম', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': 'ট্রিগার', |
| | | 'menu.account': 'হিসাব', |
| | | 'menu.account.center': 'অ্যাকাউন্ট কেন্দ্র', |
| | | 'menu.account.settings': 'অ্যাকাউন্ট সেটিংস', |
| | | 'menu.account.trigger': 'ট্রিগার ত্রুটি', |
| | | 'menu.account.logout': 'প্রস্থান', |
| | | 'menu.editor': 'গ্রাফিক সম্পাদক', |
| | | 'menu.editor.flow': 'ফ্লো এডিটর', |
| | | 'menu.editor.mind': 'মাইন্ড এডিটর', |
| | | 'menu.editor.koni': 'কোনি সম্পাদক', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': |
| | | 'পিঁপড়া ডিজাইন হচ্ছে সিহু জেলার সবচেয়ে প্রভাবশালী ওয়েব ডিজাইনের স্পেসিফিকেশন', |
| | | 'pages.login.accountLogin.tab': 'অ্যাকাউন্টে লগইন', |
| | | 'pages.login.accountLogin.errorMessage': 'ভুল ব্যবহারকারীর নাম/পাসওয়ার্ড(admin/ant.design)', |
| | | 'pages.login.failure': 'লগইন ব্যর্থ হয়েছে। আবার চেষ্টা করুন!', |
| | | 'pages.login.success': 'সফল লগইন!', |
| | | 'pages.login.username.placeholder': 'ব্যবহারকারীর নাম: admin or user', |
| | | 'pages.login.username.required': 'আপনার ব্যবহারকারীর নাম ইনপুট করুন!', |
| | | 'pages.login.password.placeholder': 'পাসওয়ার্ড: ant.design', |
| | | 'pages.login.password.required': 'আপনার পাসওয়ার্ড ইনপুট করুন!', |
| | | 'pages.login.phoneLogin.tab': 'ফোন লগইন', |
| | | 'pages.login.phoneLogin.errorMessage': 'যাচাইকরণ কোড ত্রুটি', |
| | | 'pages.login.phoneNumber.placeholder': 'ফোন নম্বর', |
| | | 'pages.login.phoneNumber.required': 'আপনার ফোন নম্বর ইনপুট করুন!', |
| | | 'pages.login.phoneNumber.invalid': 'ফোন নম্বরটি সঠিক নয়!', |
| | | 'pages.login.captcha.placeholder': 'যাচাইকরণের কোড', |
| | | 'pages.login.captcha.required': 'দয়া করে ভেরিফিকেশন কোডটি ইনপুট করুন!', |
| | | 'pages.login.phoneLogin.getVerificationCode': 'কোড পান', |
| | | 'pages.getCaptchaSecondText': 'সেকেন্ড', |
| | | 'pages.login.rememberMe': 'আমাকে মনে রাখুন', |
| | | 'pages.login.forgotPassword': 'পাসওয়ার্ড ভুলে গেছেন?', |
| | | 'pages.login.submit': 'প্রবেশ করুন', |
| | | 'pages.login.loginWith': 'লগইন করতে পারেন:', |
| | | 'pages.login.registerAccount': 'অ্যাকাউন্ট নিবন্ধন করুন', |
| | | 'pages.welcome.link': 'স্বাগতম', |
| | | 'pages.welcome.alertMessage': 'দ্রুত এবং শক্তিশালী ভারী শুল্ক উপাদান প্রকাশ করা হয়েছে।', |
| | | 'pages.admin.subPage.title': 'এই পৃষ্ঠাটি কেবল অ্যাডমিন দ্বারা দেখা যাবে', |
| | | 'pages.admin.subPage.alertMessage': |
| | | 'UMI UI এখন প্রকাশিত হয়েছে, অভিজ্ঞতা শুরু করতে npm run ui ব্যবহার করতে স্বাগতম।', |
| | | 'pages.searchTable.createForm.newRule': 'নতুন বিধি', |
| | | 'pages.searchTable.updateForm.ruleConfig': 'বিধি কনফিগারেশন', |
| | | 'pages.searchTable.updateForm.basicConfig': 'মৌলিক তথ্য', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': 'বিধি নাম', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': 'বিধির নাম লিখুন!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': 'বিধির বিবরণ', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'কমপক্ষে পাঁচটি অক্ষর লিখুন', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': |
| | | 'কমপক্ষে পাঁচটি অক্ষরের একটি বিধান বিবরণ লিখুন!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': 'বৈশিষ্ট্য কনফিগার করুন', |
| | | 'pages.searchTable.updateForm.object': 'নিরীক্ষণ অবজেক্ট', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': 'বিধি টেম্পলেট', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': 'বিধি প্রকার', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': 'সময়সূচী নির্ধারণ করুন', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'শুরুর সময়', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'একটি শুরুর সময় চয়ন করুন!', |
| | | 'pages.searchTable.titleDesc': 'বর্ণনা', |
| | | 'pages.searchTable.ruleName': 'বিধি নাম প্রয়োজন', |
| | | 'pages.searchTable.titleCallNo': 'পরিষেবা কল সংখ্যা', |
| | | 'pages.searchTable.titleStatus': 'অবস্থা', |
| | | 'pages.searchTable.nameStatus.default': 'ডিফল্ট', |
| | | 'pages.searchTable.nameStatus.running': 'চলমান', |
| | | 'pages.searchTable.nameStatus.online': 'অনলাইন', |
| | | 'pages.searchTable.nameStatus.abnormal': 'অস্বাভাবিক', |
| | | 'pages.searchTable.titleUpdatedAt': 'সর্বশেষ নির্ধারিত', |
| | | 'pages.searchTable.exception': 'ব্যতিক্রম জন্য কারণ লিখুন!', |
| | | 'pages.searchTable.titleOption': 'অপশন', |
| | | 'pages.searchTable.config': 'কনফিগারেশন', |
| | | 'pages.searchTable.subscribeAlert': 'সতর্কতা সাবস্ক্রাইব করুন', |
| | | 'pages.searchTable.title': 'ইনকয়েরি ফরম', |
| | | 'pages.searchTable.new': 'নতুন', |
| | | 'pages.searchTable.chosen': 'নির্বাচিত', |
| | | 'pages.searchTable.item': 'আইটেম', |
| | | 'pages.searchTable.totalServiceCalls': 'পরিষেবা কলগুলির মোট সংখ্যা', |
| | | 'pages.searchTable.tenThousand': '000', |
| | | 'pages.searchTable.batchDeletion': 'একসাখে ডিলিট', |
| | | 'pages.searchTable.batchApproval': 'একসাখে অনুমোদন', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': 'আপনি এখন অফলাইন', |
| | | 'app.pwa.serviceworker.updated': 'নতুন সামগ্রী উপলব্ধ', |
| | | 'app.pwa.serviceworker.updated.hint': |
| | | 'বর্তমান পৃষ্ঠাটি পুনরায় লোড করতে দয়া করে "রিফ্রেশ" বোতাম টিপুন', |
| | | 'app.pwa.serviceworker.updated.ok': 'রিফ্রেশ', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': 'পৃষ্ঠা স্টাইল সেটিং', |
| | | 'app.setting.pagestyle.dark': 'ডার্ক স্টাইল', |
| | | 'app.setting.pagestyle.light': 'লাইট স্টাইল', |
| | | 'app.setting.content-width': 'সামগ্রীর প্রস্থ', |
| | | 'app.setting.content-width.fixed': 'স্থির', |
| | | 'app.setting.content-width.fluid': 'প্রবাহী', |
| | | 'app.setting.themecolor': 'থিম রঙ', |
| | | 'app.setting.themecolor.dust': 'ডাস্ট রেড', |
| | | 'app.setting.themecolor.volcano': 'আগ্নেয়গিরি', |
| | | 'app.setting.themecolor.sunset': 'সানসেট কমলা', |
| | | 'app.setting.themecolor.cyan': 'সবুজাভ নীল', |
| | | 'app.setting.themecolor.green': 'পোলার সবুজ', |
| | | 'app.setting.themecolor.daybreak': 'দিবস ব্রেক ব্লু (ডিফল্ট)', |
| | | 'app.setting.themecolor.geekblue': 'গিক আঠালো', |
| | | 'app.setting.themecolor.purple': 'গোল্ডেন বেগুনি', |
| | | 'app.setting.navigationmode': 'নেভিগেশন মোড', |
| | | 'app.setting.sidemenu': 'সাইড মেনু লেআউট', |
| | | 'app.setting.topmenu': 'টপ মেনু লেআউট', |
| | | 'app.setting.fixedheader': 'স্থির হেডার', |
| | | 'app.setting.fixedsidebar': 'স্থির সাইডবার', |
| | | 'app.setting.fixedsidebar.hint': 'সাইড মেনু বিন্যাসে কাজ করে', |
| | | 'app.setting.hideheader': 'স্ক্রোল করার সময় হেডার লুকানো', |
| | | 'app.setting.hideheader.hint': 'লুকানো হেডার সক্ষম থাকলে কাজ করে', |
| | | 'app.setting.othersettings': 'অন্যান্য সেটিংস্', |
| | | 'app.setting.weakmode': 'দুর্বল মোড', |
| | | 'app.setting.copy': 'সেটিং কপি করুন', |
| | | 'app.setting.copyinfo': 'সাফল্যের অনুলিপি করুন - প্রতিস্থাপন করুন: src/models/setting.js', |
| | | 'app.setting.production.hint': |
| | | 'কেবল বিকাশের পরিবেশে প্যানেল শো সেট করা হচ্ছে, দয়া করে ম্যানুয়ালি সংশোধন করুন', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': 'মৌলিক বৈশিষ্ট্যসহ', |
| | | 'app.settings.menuMap.security': 'নিরাপত্তা বিন্যাস', |
| | | 'app.settings.menuMap.binding': 'অ্যাকাউন্ট বাঁধাই', |
| | | 'app.settings.menuMap.notification': 'নতুন বার্তা বিজ্ঞপ্তি', |
| | | 'app.settings.basic.avatar': 'অবতার', |
| | | 'app.settings.basic.change-avatar': 'অবতার পরিবর্তন করুন', |
| | | 'app.settings.basic.email': 'ইমেইল', |
| | | 'app.settings.basic.email-message': 'আপনার ইমেইল ইনপুট করুন!', |
| | | 'app.settings.basic.userName': 'ডাক নাম', |
| | | 'app.settings.basic.userName-message': 'আপনার ডাকনামটি ইনপুট করুন!', |
| | | 'app.settings.basic.profile': 'ব্যক্তিগত প্রোফাইল', |
| | | 'app.settings.basic.profile-message': 'আপনার ব্যক্তিগত প্রোফাইল ইনপুট করুন!', |
| | | 'app.settings.basic.profile-placeholder': 'নিজের সাথে সংক্ষিপ্ত পরিচয়', |
| | | 'app.settings.basic.country': 'দেশ/অঞ্চল', |
| | | 'app.settings.basic.country-message': 'আপনার দেশ ইনপুট করুন!', |
| | | 'app.settings.basic.geographic': 'প্রদেশ বা শহর', |
| | | 'app.settings.basic.geographic-message': 'আপনার ভৌগলিক তথ্য ইনপুট করুন!', |
| | | 'app.settings.basic.address': 'রাস্তার ঠিকানা', |
| | | 'app.settings.basic.address-message': 'দয়া করে আপনার ঠিকানা ইনপুট করুন!', |
| | | 'app.settings.basic.phone': 'ফোন নম্বর', |
| | | 'app.settings.basic.phone-message': 'আপনার ফোন ইনপুট করুন!', |
| | | 'app.settings.basic.update': 'তথ্য হালনাগাদ', |
| | | 'app.settings.security.strong': 'শক্তিশালী', |
| | | 'app.settings.security.medium': 'মধ্যম', |
| | | 'app.settings.security.weak': 'দুর্বল', |
| | | 'app.settings.security.password': 'অ্যাকাউন্টের পাসওয়ার্ড', |
| | | 'app.settings.security.password-description': 'বর্তমান পাসওয়ার্ড শক্তি', |
| | | 'app.settings.security.phone': 'সুরক্ষা ফোন', |
| | | 'app.settings.security.phone-description': 'আবদ্ধ ফোন', |
| | | 'app.settings.security.question': 'নিরাপত্তা প্রশ্ন', |
| | | 'app.settings.security.question-description': |
| | | 'সুরক্ষা প্রশ্ন সেট করা নেই, এবং সুরক্ষা নীতি কার্যকরভাবে অ্যাকাউন্ট সুরক্ষা রক্ষা করতে পারে', |
| | | 'app.settings.security.email': 'ব্যাকআপ ইমেইল', |
| | | 'app.settings.security.email-description': 'বাউন্ড ইমেইল', |
| | | 'app.settings.security.mfa': 'MFA ডিভাইস', |
| | | 'app.settings.security.mfa-description': |
| | | "আনবাউন্ড এমএফএ ডিভাইস, বাঁধাইয়ের পরে, দু'বার নিশ্চিত করা যায়", |
| | | 'app.settings.security.modify': 'পরিবর্তন করুন', |
| | | 'app.settings.security.set': 'সেট', |
| | | 'app.settings.security.bind': 'বাঁধাই', |
| | | 'app.settings.binding.taobao': 'বাঁধাই তাওবাও', |
| | | 'app.settings.binding.taobao-description': 'বর্তমানে আনবাউন্ড তাওবাও অ্যাকাউন্ট', |
| | | 'app.settings.binding.alipay': 'বাইন্ডিং আলিপে', |
| | | 'app.settings.binding.alipay-description': 'বর্তমানে আনবাউন্ড আলিপে অ্যাকাউন্ট', |
| | | 'app.settings.binding.dingding': 'বাঁধাই ডিঙ্গটালক', |
| | | 'app.settings.binding.dingding-description': 'বর্তমানে আনবাউন্ড ডিঙ্গটাল অ্যাকাউন্ট', |
| | | 'app.settings.binding.bind': 'বাঁধাই', |
| | | 'app.settings.notification.password': 'অ্যাকাউন্টের পাসওয়ার্ড', |
| | | 'app.settings.notification.password-description': |
| | | 'অন্যান্য ব্যবহারকারীর বার্তাগুলি স্টেশন চিঠি আকারে জানানো হবে', |
| | | 'app.settings.notification.messages': 'সিস্টেম বার্তা', |
| | | 'app.settings.notification.messages-description': |
| | | 'সিস্টেম বার্তাগুলি স্টেশন চিঠির আকারে জানানো হবে', |
| | | 'app.settings.notification.todo': 'করণীয় বিজ্ঞপ্তি', |
| | | 'app.settings.notification.todo-description': 'করণীয় তালিকাটি স্টেশন থেকে চিঠি আকারে জানানো হবে', |
| | | 'app.settings.open': 'খোলা', |
| | | 'app.settings.close': 'বন্ধ', |
| | | }; |
New file |
| | |
| | | import component from './en-US/component'; |
| | | import globalHeader from './en-US/globalHeader'; |
| | | import menu from './en-US/menu'; |
| | | import pages from './en-US/pages'; |
| | | import pwa from './en-US/pwa'; |
| | | import settingDrawer from './en-US/settingDrawer'; |
| | | import settings from './en-US/settings'; |
| | | |
| | | export default { |
| | | 'navBar.lang': 'Languages', |
| | | 'layout.user.link.help': 'Help', |
| | | 'layout.user.link.privacy': 'Privacy', |
| | | 'layout.user.link.terms': 'Terms', |
| | | 'app.copyright.produced': 'Produced by Ant Financial Experience Department', |
| | | 'app.preview.down.block': 'Download this page to your local project', |
| | | 'app.welcome.link.fetch-blocks': 'Get all block', |
| | | 'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development', |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | ...pages, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': 'Expand', |
| | | 'component.tagSelect.collapse': 'Collapse', |
| | | 'component.tagSelect.all': 'All', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': 'Search', |
| | | 'component.globalHeader.search.example1': 'Search example 1', |
| | | 'component.globalHeader.search.example2': 'Search example 2', |
| | | 'component.globalHeader.search.example3': 'Search example 3', |
| | | 'component.globalHeader.help': 'Help', |
| | | 'component.globalHeader.notification': 'Notification', |
| | | 'component.globalHeader.notification.empty': 'You have viewed all notifications.', |
| | | 'component.globalHeader.message': 'Message', |
| | | 'component.globalHeader.message.empty': 'You have viewed all messsages.', |
| | | 'component.globalHeader.event': 'Event', |
| | | 'component.globalHeader.event.empty': 'You have viewed all events.', |
| | | 'component.noticeIcon.clear': 'Clear', |
| | | 'component.noticeIcon.cleared': 'Cleared', |
| | | 'component.noticeIcon.empty': 'No notifications', |
| | | 'component.noticeIcon.view-more': 'View more', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': 'Welcome', |
| | | 'menu.more-blocks': 'More Blocks', |
| | | 'menu.home': 'Home', |
| | | 'menu.admin': 'Admin', |
| | | 'menu.admin.sub-page': 'Sub-Page', |
| | | 'menu.login': 'Login', |
| | | 'menu.register': 'Register', |
| | | 'menu.register-result': 'Register Result', |
| | | 'menu.dashboard': 'Dashboard', |
| | | 'menu.dashboard.analysis': 'Analysis', |
| | | 'menu.dashboard.monitor': 'Monitor', |
| | | 'menu.dashboard.workplace': 'Workplace', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': 'Form', |
| | | 'menu.form.basic-form': 'Basic Form', |
| | | 'menu.form.step-form': 'Step Form', |
| | | 'menu.form.step-form.info': 'Step Form(write transfer information)', |
| | | 'menu.form.step-form.confirm': 'Step Form(confirm transfer information)', |
| | | 'menu.form.step-form.result': 'Step Form(finished)', |
| | | 'menu.form.advanced-form': 'Advanced Form', |
| | | 'menu.list': 'List', |
| | | 'menu.list.table-list': 'Search Table', |
| | | 'menu.list.basic-list': 'Basic List', |
| | | 'menu.list.card-list': 'Card List', |
| | | 'menu.list.search-list': 'Search List', |
| | | 'menu.list.search-list.articles': 'Search List(articles)', |
| | | 'menu.list.search-list.projects': 'Search List(projects)', |
| | | 'menu.list.search-list.applications': 'Search List(applications)', |
| | | 'menu.profile': 'Profile', |
| | | 'menu.profile.basic': 'Basic Profile', |
| | | 'menu.profile.advanced': 'Advanced Profile', |
| | | 'menu.result': 'Result', |
| | | 'menu.result.success': 'Success', |
| | | 'menu.result.fail': 'Fail', |
| | | 'menu.exception': 'Exception', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': 'Trigger', |
| | | 'menu.account': 'Account', |
| | | 'menu.account.center': 'Account Center', |
| | | 'menu.account.settings': 'Account Settings', |
| | | 'menu.account.trigger': 'Trigger Error', |
| | | 'menu.account.logout': 'Logout', |
| | | 'menu.editor': 'Graphic Editor', |
| | | 'menu.editor.flow': 'Flow Editor', |
| | | 'menu.editor.mind': 'Mind Editor', |
| | | 'menu.editor.koni': 'Koni Editor', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': |
| | | 'Ant Design is the most influential web design specification in Xihu district', |
| | | 'pages.login.accountLogin.tab': 'Account Login', |
| | | 'pages.login.accountLogin.errorMessage': 'Incorrect username/password(admin/ant.design)', |
| | | 'pages.login.failure': 'Login failed, please try again!', |
| | | 'pages.login.success': 'Login successful!', |
| | | 'pages.login.username.placeholder': 'Username: admin or user', |
| | | 'pages.login.username.required': 'Please input your username!', |
| | | 'pages.login.password.placeholder': 'Password: ant.design', |
| | | 'pages.login.password.required': 'Please input your password!', |
| | | 'pages.login.phoneLogin.tab': 'Phone Login', |
| | | 'pages.login.phoneLogin.errorMessage': 'Verification Code Error', |
| | | 'pages.login.phoneNumber.placeholder': 'Phone Number', |
| | | 'pages.login.phoneNumber.required': 'Please input your phone number!', |
| | | 'pages.login.phoneNumber.invalid': 'Phone number is invalid!', |
| | | 'pages.login.captcha.placeholder': 'Verification Code', |
| | | 'pages.login.captcha.required': 'Please input verification code!', |
| | | 'pages.login.phoneLogin.getVerificationCode': 'Get Code', |
| | | 'pages.getCaptchaSecondText': 'sec(s)', |
| | | 'pages.login.rememberMe': 'Remember me', |
| | | 'pages.login.forgotPassword': 'Forgot Password ?', |
| | | 'pages.login.submit': 'Login', |
| | | 'pages.login.loginWith': 'Login with :', |
| | | 'pages.login.registerAccount': 'Register Account', |
| | | 'pages.welcome.link': 'Welcome', |
| | | 'pages.welcome.alertMessage': 'Faster and stronger heavy-duty components have been released.', |
| | | 'pages.admin.subPage.title': 'This page can only be viewed by Admin', |
| | | 'pages.admin.subPage.alertMessage': |
| | | 'Umi ui is now released, welcome to use npm run ui to start the experience.', |
| | | 'pages.searchTable.createForm.newRule': 'New Rule', |
| | | 'pages.searchTable.updateForm.ruleConfig': 'Rule configuration', |
| | | 'pages.searchTable.updateForm.basicConfig': 'Basic Information', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': 'Rule Name', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': 'Please enter the rule name!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': 'Rule Description', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'Please enter at least five characters', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': |
| | | 'Please enter a rule description of at least five characters!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': 'Configure Properties', |
| | | 'pages.searchTable.updateForm.object': 'Monitoring Object', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': 'Rule Template', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': 'Rule Type', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': 'Set Scheduling Period', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Starting Time', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Please choose a start time!', |
| | | 'pages.searchTable.titleDesc': 'Description', |
| | | 'pages.searchTable.ruleName': 'Rule name is required', |
| | | 'pages.searchTable.titleCallNo': 'Number of Service Calls', |
| | | 'pages.searchTable.titleStatus': 'Status', |
| | | 'pages.searchTable.nameStatus.default': 'default', |
| | | 'pages.searchTable.nameStatus.running': 'running', |
| | | 'pages.searchTable.nameStatus.online': 'online', |
| | | 'pages.searchTable.nameStatus.abnormal': 'abnormal', |
| | | 'pages.searchTable.titleUpdatedAt': 'Last Scheduled at', |
| | | 'pages.searchTable.exception': 'Please enter the reason for the exception!', |
| | | 'pages.searchTable.titleOption': 'Option', |
| | | 'pages.searchTable.config': 'Configuration', |
| | | 'pages.searchTable.subscribeAlert': 'Subscribe to alerts', |
| | | 'pages.searchTable.title': 'Enquiry Form', |
| | | 'pages.searchTable.new': 'New', |
| | | 'pages.searchTable.chosen': 'chosen', |
| | | 'pages.searchTable.item': 'item', |
| | | 'pages.searchTable.totalServiceCalls': 'Total Number of Service Calls', |
| | | 'pages.searchTable.tenThousand': '0000', |
| | | 'pages.searchTable.batchDeletion': 'batch deletion', |
| | | 'pages.searchTable.batchApproval': 'batch approval', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': 'You are offline now', |
| | | 'app.pwa.serviceworker.updated': 'New content is available', |
| | | 'app.pwa.serviceworker.updated.hint': 'Please press the "Refresh" button to reload current page', |
| | | 'app.pwa.serviceworker.updated.ok': 'Refresh', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': 'Page style setting', |
| | | 'app.setting.pagestyle.dark': 'Dark style', |
| | | 'app.setting.pagestyle.light': 'Light style', |
| | | 'app.setting.content-width': 'Content Width', |
| | | 'app.setting.content-width.fixed': 'Fixed', |
| | | 'app.setting.content-width.fluid': 'Fluid', |
| | | 'app.setting.themecolor': 'Theme Color', |
| | | 'app.setting.themecolor.dust': 'Dust Red', |
| | | 'app.setting.themecolor.volcano': 'Volcano', |
| | | 'app.setting.themecolor.sunset': 'Sunset Orange', |
| | | 'app.setting.themecolor.cyan': 'Cyan', |
| | | 'app.setting.themecolor.green': 'Polar Green', |
| | | 'app.setting.themecolor.daybreak': 'Daybreak Blue (default)', |
| | | 'app.setting.themecolor.geekblue': 'Geek Glue', |
| | | 'app.setting.themecolor.purple': 'Golden Purple', |
| | | 'app.setting.navigationmode': 'Navigation Mode', |
| | | 'app.setting.sidemenu': 'Side Menu Layout', |
| | | 'app.setting.topmenu': 'Top Menu Layout', |
| | | 'app.setting.fixedheader': 'Fixed Header', |
| | | 'app.setting.fixedsidebar': 'Fixed Sidebar', |
| | | 'app.setting.fixedsidebar.hint': 'Works on Side Menu Layout', |
| | | 'app.setting.hideheader': 'Hidden Header when scrolling', |
| | | 'app.setting.hideheader.hint': 'Works when Hidden Header is enabled', |
| | | 'app.setting.othersettings': 'Other Settings', |
| | | 'app.setting.weakmode': 'Weak Mode', |
| | | 'app.setting.copy': 'Copy Setting', |
| | | 'app.setting.copyinfo': 'copy success,please replace defaultSettings in src/models/setting.js', |
| | | 'app.setting.production.hint': |
| | | 'Setting panel shows in development environment only, please manually modify', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': 'Basic Settings', |
| | | 'app.settings.menuMap.security': 'Security Settings', |
| | | 'app.settings.menuMap.binding': 'Account Binding', |
| | | 'app.settings.menuMap.notification': 'New Message Notification', |
| | | 'app.settings.basic.avatar': 'Avatar', |
| | | 'app.settings.basic.change-avatar': 'Change avatar', |
| | | 'app.settings.basic.email': 'Email', |
| | | 'app.settings.basic.email-message': 'Please input your email!', |
| | | 'app.settings.basic.userName': 'userName', |
| | | 'app.settings.basic.userName-message': 'Please input your userName!', |
| | | 'app.settings.basic.profile': 'Personal profile', |
| | | 'app.settings.basic.profile-message': 'Please input your personal profile!', |
| | | 'app.settings.basic.profile-placeholder': 'Brief introduction to yourself', |
| | | 'app.settings.basic.country': 'Country/Region', |
| | | 'app.settings.basic.country-message': 'Please input your country!', |
| | | 'app.settings.basic.geographic': 'Province or city', |
| | | 'app.settings.basic.geographic-message': 'Please input your geographic info!', |
| | | 'app.settings.basic.address': 'Street Address', |
| | | 'app.settings.basic.address-message': 'Please input your address!', |
| | | 'app.settings.basic.phone': 'Phone Number', |
| | | 'app.settings.basic.phone-message': 'Please input your phone!', |
| | | 'app.settings.basic.update': 'Update Information', |
| | | 'app.settings.security.strong': 'Strong', |
| | | 'app.settings.security.medium': 'Medium', |
| | | 'app.settings.security.weak': 'Weak', |
| | | 'app.settings.security.password': 'Account Password', |
| | | 'app.settings.security.password-description': 'Current password strength', |
| | | 'app.settings.security.phone': 'Security Phone', |
| | | 'app.settings.security.phone-description': 'Bound phone', |
| | | 'app.settings.security.question': 'Security Question', |
| | | 'app.settings.security.question-description': |
| | | 'The security question is not set, and the security policy can effectively protect the account security', |
| | | 'app.settings.security.email': 'Backup Email', |
| | | 'app.settings.security.email-description': 'Bound Email', |
| | | 'app.settings.security.mfa': 'MFA Device', |
| | | 'app.settings.security.mfa-description': |
| | | 'Unbound MFA device, after binding, can be confirmed twice', |
| | | 'app.settings.security.modify': 'Modify', |
| | | 'app.settings.security.set': 'Set', |
| | | 'app.settings.security.bind': 'Bind', |
| | | 'app.settings.binding.taobao': 'Binding Taobao', |
| | | 'app.settings.binding.taobao-description': 'Currently unbound Taobao account', |
| | | 'app.settings.binding.alipay': 'Binding Alipay', |
| | | 'app.settings.binding.alipay-description': 'Currently unbound Alipay account', |
| | | 'app.settings.binding.dingding': 'Binding DingTalk', |
| | | 'app.settings.binding.dingding-description': 'Currently unbound DingTalk account', |
| | | 'app.settings.binding.bind': 'Bind', |
| | | 'app.settings.notification.password': 'Account Password', |
| | | 'app.settings.notification.password-description': |
| | | 'Messages from other users will be notified in the form of a station letter', |
| | | 'app.settings.notification.messages': 'System Messages', |
| | | 'app.settings.notification.messages-description': |
| | | 'System messages will be notified in the form of a station letter', |
| | | 'app.settings.notification.todo': 'To-do Notification', |
| | | 'app.settings.notification.todo-description': |
| | | 'The to-do list will be notified in the form of a letter from the station', |
| | | 'app.settings.open': 'Open', |
| | | 'app.settings.close': 'Close', |
| | | }; |
New file |
| | |
| | | import component from './fa-IR/component'; |
| | | import globalHeader from './fa-IR/globalHeader'; |
| | | import menu from './fa-IR/menu'; |
| | | import pages from './fa-IR/pages'; |
| | | import pwa from './fa-IR/pwa'; |
| | | import settingDrawer from './fa-IR/settingDrawer'; |
| | | import settings from './fa-IR/settings'; |
| | | |
| | | export default { |
| | | 'navBar.lang': 'زبان ها ', |
| | | 'layout.user.link.help': 'کمک', |
| | | 'layout.user.link.privacy': 'حریم خصوصی', |
| | | 'layout.user.link.terms': 'مقررات', |
| | | 'app.preview.down.block': 'این صفحه را در پروژه محلی خود بارگیری کنید', |
| | | 'app.welcome.link.fetch-blocks': 'دریافت تمام بلوک', |
| | | 'app.welcome.link.block-list': 'به سرعت صفحات استاندارد مبتنی بر توسعه "بلوک" را بسازید', |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | ...pages, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': 'باز', |
| | | 'component.tagSelect.collapse': 'بسته ', |
| | | 'component.tagSelect.all': 'همه', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': 'جستجو ', |
| | | 'component.globalHeader.search.example1': 'مثال 1 را جستجو کنید', |
| | | 'component.globalHeader.search.example2': 'مثال 2 را جستجو کنید', |
| | | 'component.globalHeader.search.example3': 'مثال 3 را جستجو کنید', |
| | | 'component.globalHeader.help': 'کمک', |
| | | 'component.globalHeader.notification': 'اعلان', |
| | | 'component.globalHeader.notification.empty': 'شما همه اعلان ها را مشاهده کرده اید.', |
| | | 'component.globalHeader.message': 'پیام', |
| | | 'component.globalHeader.message.empty': 'شما همه پیام ها را مشاهده کرده اید.', |
| | | 'component.globalHeader.event': 'رویداد', |
| | | 'component.globalHeader.event.empty': 'شما همه رویدادها را مشاهده کرده اید.', |
| | | 'component.noticeIcon.clear': 'پاک کردن', |
| | | 'component.noticeIcon.cleared': 'پاک شد', |
| | | 'component.noticeIcon.empty': 'بدون اعلان', |
| | | 'component.noticeIcon.view-more': 'نمایش بیشتر', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': 'خوش آمدید', |
| | | 'menu.more-blocks': 'بلوک های بیشتر', |
| | | 'menu.home': 'خانه', |
| | | 'menu.admin': 'مدیر', |
| | | 'menu.admin.sub-page': 'زیر صفحه', |
| | | 'menu.login': 'ورود', |
| | | 'menu.register': 'ثبت نام', |
| | | 'menu.register-result': 'ثبت نام نتیجه', |
| | | 'menu.dashboard': 'داشبورد', |
| | | 'menu.dashboard.analysis': 'تحلیل و بررسی', |
| | | 'menu.dashboard.monitor': 'نظارت', |
| | | 'menu.dashboard.workplace': 'محل کار', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': 'فرم', |
| | | 'menu.form.basic-form': 'فرم اساسی', |
| | | 'menu.form.step-form': 'فرم مرحله', |
| | | 'menu.form.step-form.info': 'فرم مرحله (نوشتن اطلاعات انتقال)', |
| | | 'menu.form.step-form.confirm': 'فرم مرحله (تأیید اطلاعات انتقال)', |
| | | 'menu.form.step-form.result': 'فرم مرحله (تمام شده)', |
| | | 'menu.form.advanced-form': 'فرم پیشرفته', |
| | | 'menu.list': 'لیست', |
| | | 'menu.list.table-list': 'جدول جستجو', |
| | | 'menu.list.basic-list': 'لیست اصلی', |
| | | 'menu.list.card-list': 'لیست کارت', |
| | | 'menu.list.search-list': 'لیست جستجو', |
| | | 'menu.list.search-list.articles': 'لیست جستجو (مقالات)', |
| | | 'menu.list.search-list.projects': 'لیست جستجو (پروژه ها)', |
| | | 'menu.list.search-list.applications': 'لیست جستجو (برنامه ها)', |
| | | 'menu.profile': 'مشخصات', |
| | | 'menu.profile.basic': 'مشخصات عمومی', |
| | | 'menu.profile.advanced': 'مشخصات پیشرفته', |
| | | 'menu.result': 'نتیجه', |
| | | 'menu.result.success': 'موفق', |
| | | 'menu.result.fail': 'ناموفق', |
| | | 'menu.exception': 'استثنا', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': 'راه اندازی', |
| | | 'menu.account': 'حساب', |
| | | 'menu.account.center': 'مرکز حساب', |
| | | 'menu.account.settings': 'تنظیمات حساب', |
| | | 'menu.account.trigger': 'خطای راه اندازی', |
| | | 'menu.account.logout': 'خروج', |
| | | 'menu.editor': 'ویرایشگر گرافیک', |
| | | 'menu.editor.flow': 'ویرایشگر جریان', |
| | | 'menu.editor.mind': 'ویرایشگر ذهن', |
| | | 'menu.editor.koni': 'ویرایشگر Koni', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': 'طراحی مورچه تأثیرگذارترین مشخصات طراحی وب در منطقه Xihu است', |
| | | 'pages.login.accountLogin.tab': 'ورود به حساب کاربری', |
| | | 'pages.login.accountLogin.errorMessage': 'نام کاربری / رمزعبور نادرست (مدیر / ant.design)', |
| | | 'pages.login.failure': 'ورود به سیستم با شکست مواجه شد، لطفا دوباره سعی کنید!', |
| | | 'pages.login.success': 'ورود موفق!', |
| | | 'pages.login.username.placeholder': 'نام کاربری: مدیر یا کاربر', |
| | | 'pages.login.username.required': 'لطفا نام کاربری خود را وارد کنید!', |
| | | 'pages.login.password.placeholder': 'رمز عبور: ant.design', |
| | | 'pages.login.password.required': 'لطفاً رمز ورود خود را وارد کنید!', |
| | | 'pages.login.phoneLogin.tab': 'ورود به سیستم تلفن', |
| | | 'pages.login.phoneLogin.errorMessage': 'خطای کد تأیید', |
| | | 'pages.login.phoneNumber.placeholder': 'شماره تلفن', |
| | | 'pages.login.phoneNumber.required': 'لطفاً شماره تلفن خود را وارد کنید!', |
| | | 'pages.login.phoneNumber.invalid': 'شماره تلفن نامعتبر است!', |
| | | 'pages.login.captcha.placeholder': 'کد تایید', |
| | | 'pages.login.captcha.required': 'لطفا کد تأیید را وارد کنید!', |
| | | 'pages.login.phoneLogin.getVerificationCode': 'دریافت کد', |
| | | 'pages.getCaptchaSecondText': 'ثانیه', |
| | | 'pages.login.rememberMe': 'مرا به خاطر بسپار', |
| | | 'pages.login.forgotPassword': 'رمز عبور را فراموش کرده اید ?', |
| | | 'pages.login.submit': 'ارسال', |
| | | 'pages.login.loginWith': 'وارد شوید با :', |
| | | 'pages.login.registerAccount': 'ثبت نام', |
| | | 'pages.welcome.link': 'خوش آمدید', |
| | | 'pages.welcome.alertMessage': 'اجزای سنگین تر سریعتر و قوی تر آزاد شده اند.', |
| | | 'pages.admin.subPage.title': 'این صفحه فقط توسط مدیر قابل مشاهده است', |
| | | 'pages.admin.subPage.alertMessage': |
| | | 'رابط کاربری Umi اکنون منتشر شده است ، برای شروع تجربه استفاده از npm run ui خوش آمدید.', |
| | | 'pages.searchTable.createForm.newRule': 'قانون جدید', |
| | | 'pages.searchTable.updateForm.ruleConfig': 'پیکربندی قانون', |
| | | 'pages.searchTable.updateForm.basicConfig': 'اطلاعات اولیه', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': ' نام قانون', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': 'لطفاً نام قانون را وارد کنید!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': 'شرح قانون', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'لطفاً حداقل پنج حرف وارد کنید', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': |
| | | 'لطفاً حداقل یک قانون حاوی پنج کاراکتر شرح دهید!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': 'پیکربندی خصوصیات', |
| | | 'pages.searchTable.updateForm.object': 'نظارت بر شی', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': 'الگوی قانون', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': 'نوع قانون', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': 'تنظیم دوره زمان بندی', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'زمان شروع', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'لطفاً زمان شروع را انتخاب کنید!', |
| | | 'pages.searchTable.titleDesc': 'شرح', |
| | | 'pages.searchTable.ruleName': 'نام قانون لازم است', |
| | | 'pages.searchTable.titleCallNo': 'تعداد تماس های خدماتی', |
| | | 'pages.searchTable.titleStatus': 'وضعیت', |
| | | 'pages.searchTable.nameStatus.default': 'پیش فرض', |
| | | 'pages.searchTable.nameStatus.running': 'در حال دویدن', |
| | | 'pages.searchTable.nameStatus.online': 'برخط', |
| | | 'pages.searchTable.nameStatus.abnormal': 'غیرطبیعی', |
| | | 'pages.searchTable.titleUpdatedAt': 'آخرین برنامه ریزی در', |
| | | 'pages.searchTable.exception': 'لطفا دلیل استثنا را وارد کنید!', |
| | | 'pages.searchTable.titleOption': 'گزینه', |
| | | 'pages.searchTable.config': 'پیکربندی', |
| | | 'pages.searchTable.subscribeAlert': 'مشترک شدن در هشدارها', |
| | | 'pages.searchTable.title': 'فرم درخواست', |
| | | 'pages.searchTable.new': 'جدید', |
| | | 'pages.searchTable.chosen': 'انتخاب شده', |
| | | 'pages.searchTable.item': 'مورد', |
| | | 'pages.searchTable.totalServiceCalls': 'تعداد کل تماس های خدماتی', |
| | | 'pages.searchTable.tenThousand': '0000', |
| | | 'pages.searchTable.batchDeletion': 'حذف دسته ای', |
| | | 'pages.searchTable.batchApproval': 'تصویب دسته ای', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': 'شما اکنون آفلاین هستید', |
| | | 'app.pwa.serviceworker.updated': 'مطالب جدید در دسترس است', |
| | | 'app.pwa.serviceworker.updated.hint': |
| | | 'لطفاً برای بارگیری مجدد صفحه فعلی ، دکمه "تازه سازی" را فشار دهید', |
| | | 'app.pwa.serviceworker.updated.ok': 'تازه سازی', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': 'تنظیم نوع صفحه', |
| | | 'app.setting.pagestyle.dark': 'سبک تیره', |
| | | 'app.setting.pagestyle.light': 'سبک سبک', |
| | | 'app.setting.content-width': 'عرض محتوا', |
| | | 'app.setting.content-width.fixed': 'ثابت', |
| | | 'app.setting.content-width.fluid': 'شناور', |
| | | 'app.setting.themecolor': 'رنگ تم', |
| | | 'app.setting.themecolor.dust': 'گرد و غبار قرمز', |
| | | 'app.setting.themecolor.volcano': 'آتشفشان', |
| | | 'app.setting.themecolor.sunset': 'غروب نارنجی', |
| | | 'app.setting.themecolor.cyan': 'فیروزه ای', |
| | | 'app.setting.themecolor.green': 'سبز قطبی', |
| | | 'app.setting.themecolor.daybreak': 'آبی روشن(پیشفرض)', |
| | | 'app.setting.themecolor.geekblue': 'چسب گیک', |
| | | 'app.setting.themecolor.purple': 'بنفش طلایی', |
| | | 'app.setting.navigationmode': 'حالت پیمایش', |
| | | 'app.setting.sidemenu': 'طرح منوی کناری', |
| | | 'app.setting.topmenu': 'طرح منوی بالایی', |
| | | 'app.setting.fixedheader': 'سرصفحه ثابت', |
| | | 'app.setting.fixedsidebar': 'نوار کناری ثابت', |
| | | 'app.setting.fixedsidebar.hint': 'کار بر روی منوی کناری', |
| | | 'app.setting.hideheader': 'هدر پنهان هنگام پیمایش', |
| | | 'app.setting.hideheader.hint': 'وقتی Hidden Header فعال باشد کار می کند', |
| | | 'app.setting.othersettings': 'تنظیمات دیگر', |
| | | 'app.setting.weakmode': 'حالت ضعیف', |
| | | 'app.setting.copy': 'تنظیمات کپی', |
| | | 'app.setting.copyinfo': |
| | | 'موفقیت در کپی کردن , لطفا defaultSettings را در src / models / setting.js جایگزین کنید', |
| | | 'app.setting.production.hint': |
| | | 'صفحه تنظیم فقط در محیط توسعه نمایش داده می شود ، لطفاً دستی تغییر دهید', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': 'تنظیمات پایه ', |
| | | 'app.settings.menuMap.security': 'تنظیمات امنیتی', |
| | | 'app.settings.menuMap.binding': 'صحافی حساب', |
| | | 'app.settings.menuMap.notification': 'اعلان پیام جدید', |
| | | 'app.settings.basic.avatar': 'آواتار', |
| | | 'app.settings.basic.change-avatar': 'آواتار را تغییر دهید', |
| | | 'app.settings.basic.email': 'ایمیل', |
| | | 'app.settings.basic.email-message': 'لطفا ایمیل خود را وارد کنید!', |
| | | 'app.settings.basic.userName': 'نام مستعار', |
| | | 'app.settings.basic.userName-message': 'لطفاً نام مستعار خود را وارد کنید!', |
| | | 'app.settings.basic.profile': 'پروفایل شخصی', |
| | | 'app.settings.basic.profile-message': 'لطفاً مشخصات شخصی خود را وارد کنید!', |
| | | 'app.settings.basic.profile-placeholder': 'معرفی مختصر خودتان', |
| | | 'app.settings.basic.country': 'کشور / منطقه', |
| | | 'app.settings.basic.country-message': 'لطفاً کشور خود را وارد کنید!', |
| | | 'app.settings.basic.geographic': 'استان یا شهر', |
| | | 'app.settings.basic.geographic-message': 'لطفاً اطلاعات جغرافیایی خود را وارد کنید!', |
| | | 'app.settings.basic.address': 'آدرس خیابان', |
| | | 'app.settings.basic.address-message': 'لطفا آدرس خود را وارد کنید!', |
| | | 'app.settings.basic.phone': 'شماره تلفن', |
| | | 'app.settings.basic.phone-message': 'لطفاً تلفن خود را وارد کنید!', |
| | | 'app.settings.basic.update': 'به روز رسانی اطلاعات', |
| | | 'app.settings.security.strong': 'قوی', |
| | | 'app.settings.security.medium': 'متوسط', |
| | | 'app.settings.security.weak': 'ضعیف', |
| | | 'app.settings.security.password': 'رمز عبور حساب کاربری', |
| | | 'app.settings.security.password-description': 'قدرت رمز عبور فعلی', |
| | | 'app.settings.security.phone': 'تلفن امنیتی', |
| | | 'app.settings.security.phone-description': 'تلفن مقید', |
| | | 'app.settings.security.question': 'سوال امنیتی', |
| | | 'app.settings.security.question-description': |
| | | 'سوال امنیتی تنظیم نشده است و سیاست امنیتی می تواند به طور موثر از امنیت حساب محافظت کند', |
| | | 'app.settings.security.email': 'ایمیل پشتیبان', |
| | | 'app.settings.security.email-description': 'ایمیل مقید', |
| | | 'app.settings.security.mfa': 'دستگاه MFA', |
| | | 'app.settings.security.mfa-description': |
| | | 'دستگاه MFA بسته نشده ، پس از اتصال ، می تواند دو بار تأیید شود', |
| | | 'app.settings.security.modify': 'تغییر', |
| | | 'app.settings.security.set': 'تنظیم', |
| | | 'app.settings.security.bind': 'بستن', |
| | | 'app.settings.binding.taobao': 'اتصال Taobao', |
| | | 'app.settings.binding.taobao-description': 'حساب Taobao در حال حاضر بسته نشده است', |
| | | 'app.settings.binding.alipay': 'اتصال Alipay', |
| | | 'app.settings.binding.alipay-description': 'حساب Alipay در حال حاضر بسته نشده است', |
| | | 'app.settings.binding.dingding': 'اتصال DingTalk', |
| | | 'app.settings.binding.dingding-description': 'حساب DingTalk در حال حاضر محدود نشده است', |
| | | 'app.settings.binding.bind': 'بستن', |
| | | 'app.settings.notification.password': 'رمز عبور حساب کاربری', |
| | | 'app.settings.notification.password-description': |
| | | 'پیام های سایر کاربران در قالب یک نامه ایستگاهی اعلام خواهد شد', |
| | | 'app.settings.notification.messages': 'پیام های سیستم', |
| | | 'app.settings.notification.messages-description': |
| | | 'پیام های سیستم به صورت نامه ایستگاه مطلع می شوند', |
| | | 'app.settings.notification.todo': 'اعلان کارها', |
| | | 'app.settings.notification.todo-description': |
| | | 'لیست کارها به صورت نامه ای از ایستگاه اطلاع داده می شود', |
| | | 'app.settings.open': 'باز کن', |
| | | 'app.settings.close': 'بستن', |
| | | }; |
New file |
| | |
| | | import component from './id-ID/component'; |
| | | import globalHeader from './id-ID/globalHeader'; |
| | | import menu from './id-ID/menu'; |
| | | import pages from './id-ID/pages'; |
| | | import pwa from './id-ID/pwa'; |
| | | import settingDrawer from './id-ID/settingDrawer'; |
| | | import settings from './id-ID/settings'; |
| | | |
| | | export default { |
| | | 'navbar.lang': 'Bahasa', |
| | | 'layout.user.link.help': 'Bantuan', |
| | | 'layout.user.link.privacy': 'Privasi', |
| | | 'layout.user.link.terms': 'Ketentuan', |
| | | 'app.preview.down.block': 'Unduh halaman ini dalam projek lokal anda', |
| | | 'app.welcome.link.fetch-blocks': 'Dapatkan semua blok', |
| | | 'app.welcome.link.block-list': |
| | | 'Buat standar dengan cepat, halaman-halaman berdasarkan pengembangan `block`', |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | ...pages, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': 'Perluas', |
| | | 'component.tagSelect.collapse': 'Lipat', |
| | | 'component.tagSelect.all': 'Semua', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': 'Pencarian', |
| | | 'component.globalHeader.search.example1': 'Contoh 1 Pencarian', |
| | | 'component.globalHeader.search.example2': 'Contoh 2 Pencarian', |
| | | 'component.globalHeader.search.example3': 'Contoh 3 Pencarian', |
| | | 'component.globalHeader.help': 'Bantuan', |
| | | 'component.globalHeader.notification': 'Notifikasi', |
| | | 'component.globalHeader.notification.empty': 'Anda telah membaca semua notifikasi', |
| | | 'component.globalHeader.message': 'Pesan', |
| | | 'component.globalHeader.message.empty': 'Anda telah membaca semua pesan.', |
| | | 'component.globalHeader.event': 'Acara', |
| | | 'component.globalHeader.event.empty': 'Anda telah melihat semua acara.', |
| | | 'component.noticeIcon.clear': 'Kosongkan', |
| | | 'component.noticeIcon.cleared': 'Berhasil dikosongkan', |
| | | 'component.noticeIcon.empty': 'Tidak ada pemberitahuan', |
| | | 'component.noticeIcon.view-more': 'Melihat lebih', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': 'Selamat Datang', |
| | | 'menu.more-blocks': 'Blocks Lainnya', |
| | | 'menu.home': 'Halaman Awal', |
| | | 'menu.admin': 'Admin', |
| | | 'menu.admin.sub-page': 'Sub-Halaman', |
| | | 'menu.login': 'Masuk', |
| | | 'menu.register': 'Pendaftaran', |
| | | 'menu.register-result': 'Hasil Pendaftaran', |
| | | 'menu.dashboard': 'Dasbor', |
| | | 'menu.dashboard.analysis': 'Analisis', |
| | | 'menu.dashboard.monitor': 'Monitor', |
| | | 'menu.dashboard.workplace': 'Workplace', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': 'Form', |
| | | 'menu.form.basic-form': 'Form Dasar', |
| | | 'menu.form.step-form': 'Form Bertahap', |
| | | 'menu.form.step-form.info': 'Form Bertahap(menulis informasi yang dibagikan)', |
| | | 'menu.form.step-form.confirm': 'Form Bertahap(konfirmasi informasi yang dibagikan)', |
| | | 'menu.form.step-form.result': 'Form Bertahap(selesai)', |
| | | 'menu.form.advanced-form': 'Form Lanjutan', |
| | | 'menu.list': 'Daftar', |
| | | 'menu.list.table-list': 'Tabel Pencarian', |
| | | 'menu.list.basic-list': 'Daftar Dasar', |
| | | 'menu.list.card-list': 'Daftar Kartu', |
| | | 'menu.list.search-list': 'Daftar Pencarian', |
| | | 'menu.list.search-list.articles': 'Daftar Pencarian(artikel)', |
| | | 'menu.list.search-list.projects': 'Daftar Pencarian(projek)', |
| | | 'menu.list.search-list.applications': 'Daftar Pencarian(aplikasi)', |
| | | 'menu.profile': 'Profil', |
| | | 'menu.profile.basic': 'Profil Dasar', |
| | | 'menu.profile.advanced': 'Profile Lanjutan', |
| | | 'menu.result': 'Hasil', |
| | | 'menu.result.success': 'Sukses', |
| | | 'menu.result.fail': 'Gagal', |
| | | 'menu.exception': 'Pengecualian', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': 'Jalankan', |
| | | 'menu.account': 'Akun', |
| | | 'menu.account.center': 'Detail Akun', |
| | | 'menu.account.settings': 'Pengaturan Akun', |
| | | 'menu.account.trigger': 'Mengaktivasi Error', |
| | | 'menu.account.logout': 'Keluar', |
| | | 'menu.editor': 'Penyusun Grafis', |
| | | 'menu.editor.flow': 'Penyusun Alur', |
| | | 'menu.editor.mind': 'Penyusun Mind', |
| | | 'menu.editor.koni': 'Penyusun Koni', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': |
| | | 'Ant Design adalah spesifikasi desain Web yang paling berpengaruh di Kabupaten Xihu', |
| | | 'pages.login.accountLogin.tab': 'Login dengan akun', |
| | | 'pages.login.accountLogin.errorMessage': 'Nama pengguna dan kata sandi salah(admin/ant.design)', |
| | | 'pages.login.failure': 'Log masuk gagal, silakan coba lagi!', |
| | | 'pages.login.success': 'Login berhasil!', |
| | | 'pages.login.username.placeholder': 'nama pengguna: admin atau user', |
| | | 'pages.login.username.required': 'Nama pengguna harus diisi!', |
| | | 'pages.login.password.placeholder': 'kata sandi: ant.design', |
| | | 'pages.login.password.required': 'Kata sandi harus diisi!', |
| | | 'pages.login.phoneLogin.tab': 'Login dengan ponsel', |
| | | 'pages.login.phoneLogin.errorMessage': 'Kesalahan kode verifikasi', |
| | | 'pages.login.phoneNumber.placeholder': 'masukkan nomor telepon', |
| | | 'pages.login.phoneNumber.required': 'Nomor ponsel harus diisi!', |
| | | 'pages.login.phoneNumber.invalid': 'Nomor ponsel tidak valid!', |
| | | 'pages.login.captcha.placeholder': 'kode verifikasi', |
| | | 'pages.login.captcha.required': 'Kode verifikasi diperlukan!', |
| | | 'pages.login.phoneLogin.getVerificationCode': 'Dapatkan kode', |
| | | 'pages.getCaptchaSecondText': 'detik tersisa', |
| | | 'pages.login.rememberMe': 'Ingat saya', |
| | | 'pages.login.forgotPassword': 'Lupa Kata Sandi?', |
| | | 'pages.login.submit': 'Masuk', |
| | | 'pages.login.loginWith': 'Masuk dengan :', |
| | | 'pages.login.registerAccount': 'Daftar Akun', |
| | | 'pages.welcome.link': 'Selamat datang', |
| | | 'pages.welcome.alertMessage': |
| | | 'Komponen heavy-duty yang lebih cepat dan lebih kuat telah dirilis.', |
| | | 'pages.admin.subPage.title': 'Halaman ini hanya dapat dilihat oleh admin', |
| | | 'pages.admin.subPage.alertMessage': |
| | | 'umi ui telah dirilis, silahkan gunakan npm run ui untuk memulai pengalaman.', |
| | | 'pages.searchTable.createForm.newRule': 'Aturan baru', |
| | | 'pages.searchTable.updateForm.ruleConfig': 'Konfigurasi aturan', |
| | | 'pages.searchTable.updateForm.basicConfig': 'Informasi dasar', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': 'Nama aturan', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': 'Harap masukkan nama aturan!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': 'Deskripsi aturan', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': |
| | | 'Harap masukkan setidaknya lima karakter', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': |
| | | 'Harap masukkan deskripsi aturan setidaknya lima karakter!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': 'Properti aturan', |
| | | 'pages.searchTable.updateForm.object': 'Objek pemantauan', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': 'Template aturan', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': 'Jenis aturan', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': 'Periode penjadwalan', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Waktu mulai', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Pilih waktu mulai!', |
| | | 'pages.searchTable.titleDesc': 'deskripsi', |
| | | 'pages.searchTable.ruleName': 'Nama aturan wajib diisi', |
| | | 'pages.searchTable.titleCallNo': 'Jumlah panggilan', |
| | | 'pages.searchTable.titleStatus': 'Status', |
| | | 'pages.searchTable.nameStatus.default': 'default', |
| | | 'pages.searchTable.nameStatus.running': 'menyala', |
| | | 'pages.searchTable.nameStatus.online': 'online', |
| | | 'pages.searchTable.nameStatus.abnormal': 'abnormal', |
| | | 'pages.searchTable.titleUpdatedAt': 'Waktu terjadwal', |
| | | 'pages.searchTable.exception': 'Harap masukkan alasan pengecualian!', |
| | | 'pages.searchTable.titleOption': 'Pengoperasian', |
| | | 'pages.searchTable.config': 'Konfigurasi', |
| | | 'pages.searchTable.subscribeAlert': 'Berlangganan notifikasi', |
| | | 'pages.searchTable.title': 'Formulir pertanyaan', |
| | | 'pages.searchTable.new': 'Baru', |
| | | 'pages.searchTable.chosen': 'Terpilih', |
| | | 'pages.searchTable.item': 'item', |
| | | 'pages.searchTable.totalServiceCalls': 'Jumlah total panggilan layanan', |
| | | 'pages.searchTable.tenThousand': '0000', |
| | | 'pages.searchTable.batchDeletion': 'Penghapusan batch', |
| | | 'pages.searchTable.batchApproval': 'Persetujuan batch', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': 'Koneksi anda terputus', |
| | | 'app.pwa.serviceworker.updated': 'Konten baru sudah tersedia', |
| | | 'app.pwa.serviceworker.updated.hint': |
| | | 'Silahkan klik tombol "Refresh" untuk memuat ulang halaman ini', |
| | | 'app.pwa.serviceworker.updated.ok': 'Memuat ulang', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': 'Pengaturan style Halaman', |
| | | 'app.setting.pagestyle.dark': 'Style Gelap', |
| | | 'app.setting.pagestyle.light': 'Style Cerah', |
| | | 'app.setting.content-width': 'Lebar Konten', |
| | | 'app.setting.content-width.fixed': 'Tetap', |
| | | 'app.setting.content-width.fluid': 'Fluid', |
| | | 'app.setting.themecolor': 'Theme Color', |
| | | 'app.setting.themecolor.dust': 'Dust Red', |
| | | 'app.setting.themecolor.volcano': 'Volcano', |
| | | 'app.setting.themecolor.sunset': 'Sunset Orange', |
| | | 'app.setting.themecolor.cyan': 'Cyan', |
| | | 'app.setting.themecolor.green': 'Polar Green', |
| | | 'app.setting.themecolor.daybreak': 'Daybreak Blue (bawaan)', |
| | | 'app.setting.themecolor.geekblue': 'Geek Glue', |
| | | 'app.setting.themecolor.purple': 'Golden Purple', |
| | | 'app.setting.navigationmode': 'Mode Navigasi', |
| | | 'app.setting.sidemenu': 'Susunan Menu Samping', |
| | | 'app.setting.topmenu': 'Susunan Menu Atas', |
| | | 'app.setting.fixedheader': 'Header Tetap', |
| | | 'app.setting.fixedsidebar': 'Sidebar Tetap', |
| | | 'app.setting.fixedsidebar.hint': 'Berjalan pada Susunan Menu Samping', |
| | | 'app.setting.hideheader': 'Sembunyikan Header ketika gulir ke bawah', |
| | | 'app.setting.hideheader.hint': 'Bekerja ketika Header tersembunyi dimunculkan', |
| | | 'app.setting.othersettings': 'Pengaturan Lainnya', |
| | | 'app.setting.weakmode': 'Mode Lemah', |
| | | 'app.setting.copy': 'Salin Pengaturan', |
| | | 'app.setting.copyinfo': |
| | | 'Berhasil disalin,tolong ubah defaultSettings pada src/models/setting.js', |
| | | 'app.setting.production.hint': |
| | | 'Panel pengaturan hanya muncul pada lingkungan pengembangan, silahkan modifikasi secara menual', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': 'Pengaturan Dasar', |
| | | 'app.settings.menuMap.security': 'Pengaturan Keamanan', |
| | | 'app.settings.menuMap.binding': 'Pengikatan Akun', |
| | | 'app.settings.menuMap.notification': 'Notifikasi Pesan Baru', |
| | | 'app.settings.basic.avatar': 'Avatar', |
| | | 'app.settings.basic.change-avatar': 'Ubah avatar', |
| | | 'app.settings.basic.email': 'Email', |
| | | 'app.settings.basic.email-message': 'Tolong masukkan email!', |
| | | 'app.settings.basic.userName': 'userName', |
| | | 'app.settings.basic.userName-message': 'Tolong masukkan userName!', |
| | | 'app.settings.basic.profile': 'Profil Personal', |
| | | 'app.settings.basic.profile-message': 'Tolong masukkan profil personal!', |
| | | 'app.settings.basic.profile-placeholder': 'Perkenalan Singkat tentang Diri Anda', |
| | | 'app.settings.basic.country': 'Negara/Wilayah', |
| | | 'app.settings.basic.country-message': 'Tolong masukkan negara anda!', |
| | | 'app.settings.basic.geographic': 'Provinsi atau kota', |
| | | 'app.settings.basic.geographic-message': 'Tolong masukkan info geografis anda!', |
| | | 'app.settings.basic.address': 'Alamat Jalan', |
| | | 'app.settings.basic.address-message': 'Tolong masukkan Alamat Jalan anda!', |
| | | 'app.settings.basic.phone': 'Nomor Ponsel', |
| | | 'app.settings.basic.phone-message': 'Tolong masukkan Nomor Ponsel anda!', |
| | | 'app.settings.basic.update': 'Perbarui Informasi', |
| | | 'app.settings.security.strong': 'Kuat', |
| | | 'app.settings.security.medium': 'Sedang', |
| | | 'app.settings.security.weak': 'Lemah', |
| | | 'app.settings.security.password': 'Kata Sandi Akun', |
| | | 'app.settings.security.password-description': 'Kekuatan Kata Sandi saat ini', |
| | | 'app.settings.security.phone': 'Keamanan Ponsel', |
| | | 'app.settings.security.phone-description': 'Mengikat Ponsel', |
| | | 'app.settings.security.question': 'Pertanyaan Keamanan', |
| | | 'app.settings.security.question-description': |
| | | 'Pertanyaan Keamanan belum diatur, dan kebijakan keamanan dapat melindungi akun secara efektif', |
| | | 'app.settings.security.email': 'Email Cadangan', |
| | | 'app.settings.security.email-description': 'Mengikat Email', |
| | | 'app.settings.security.mfa': 'Perangka MFA', |
| | | 'app.settings.security.mfa-description': |
| | | 'Tidak mengikat Perangkat MFA, setelah diikat, dapat dikonfirmasi dua kali', |
| | | 'app.settings.security.modify': 'Modifikasi', |
| | | 'app.settings.security.set': 'Setel', |
| | | 'app.settings.security.bind': 'Ikat', |
| | | 'app.settings.binding.taobao': 'Mengikat Taobao', |
| | | 'app.settings.binding.taobao-description': 'Tidak mengikat akun Taobao saat ini', |
| | | 'app.settings.binding.alipay': 'Mengikat Alipay', |
| | | 'app.settings.binding.alipay-description': 'Tidak mengikat akun Alipay saat ini', |
| | | 'app.settings.binding.dingding': 'Mengikat DingTalk', |
| | | 'app.settings.binding.dingding-description': 'Tidak mengikat akun DingTalk', |
| | | 'app.settings.binding.bind': 'Ikat', |
| | | 'app.settings.notification.password': 'Kata Sandi Akun', |
| | | 'app.settings.notification.password-description': |
| | | 'Pesan dari pengguna lain akan diberitahu dalam bentuk surat', |
| | | 'app.settings.notification.messages': 'Pesan Sistem', |
| | | 'app.settings.notification.messages-description': |
| | | 'Pesan sistem akan diberitahu dalam bentuk surat', |
| | | 'app.settings.notification.todo': 'Notifikasi daftar To-do', |
| | | 'app.settings.notification.todo-description': |
| | | 'Daftar to-do akan diberitahukan dalam bentuk surat dari stasiun', |
| | | 'app.settings.open': 'Buka', |
| | | 'app.settings.close': 'Tutup', |
| | | }; |
New file |
| | |
| | | import component from './ja-JP/component'; |
| | | import globalHeader from './ja-JP/globalHeader'; |
| | | import menu from './ja-JP/menu'; |
| | | import pages from './ja-JP/pages'; |
| | | import pwa from './ja-JP/pwa'; |
| | | import settingDrawer from './ja-JP/settingDrawer'; |
| | | import settings from './ja-JP/settings'; |
| | | |
| | | export default { |
| | | 'navBar.lang': '言語', |
| | | 'layout.user.link.help': 'ヘルプ', |
| | | 'layout.user.link.privacy': 'プライバシー', |
| | | 'layout.user.link.terms': '利用規約', |
| | | 'app.preview.down.block': 'このページをローカルプロジェクトにダウンロードしてください', |
| | | 'app.welcome.link.fetch-blocks': '', |
| | | 'app.welcome.link.block-list': '', |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | ...pages, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': '展開', |
| | | 'component.tagSelect.collapse': '折りたたむ', |
| | | 'component.tagSelect.all': 'すべて', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': '検索', |
| | | 'component.globalHeader.search.example1': '検索例1', |
| | | 'component.globalHeader.search.example2': '検索例2', |
| | | 'component.globalHeader.search.example3': '検索例3', |
| | | 'component.globalHeader.help': 'ヘルプ', |
| | | 'component.globalHeader.notification': '通知', |
| | | 'component.globalHeader.notification.empty': 'すべての通知を表示しました。', |
| | | 'component.globalHeader.message': 'メッセージ', |
| | | 'component.globalHeader.message.empty': 'すべてのメッセージを表示しました。', |
| | | 'component.globalHeader.event': 'イベント', |
| | | 'component.globalHeader.event.empty': 'すべてのイベントを表示しました。', |
| | | 'component.noticeIcon.clear': 'クリア', |
| | | 'component.noticeIcon.cleared': 'クリア済み', |
| | | 'component.noticeIcon.empty': '通知なし', |
| | | 'component.noticeIcon.view-more': 'もっと見る', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': 'ようこそ', |
| | | 'menu.more-blocks': 'その他のブロック', |
| | | 'menu.home': 'ホーム', |
| | | 'menu.admin': '管理者', |
| | | 'menu.admin.sub-page': 'サブページ', |
| | | 'menu.login': 'ログイン', |
| | | 'menu.register': '登録', |
| | | 'menu.register-result': '登録結果', |
| | | 'menu.dashboard': 'ダッシュボード', |
| | | 'menu.dashboard.analysis': '分析', |
| | | 'menu.dashboard.monitor': 'モニター', |
| | | 'menu.dashboard.workplace': '職場', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': 'フォーム', |
| | | 'menu.form.basic-form': '基本フォーム', |
| | | 'menu.form.step-form': 'ステップフォーム', |
| | | 'menu.form.step-form.info': 'ステップフォーム(転送情報の書き込み)', |
| | | 'menu.form.step-form.confirm': 'ステップフォーム(転送情報の確認)', |
| | | 'menu.form.step-form.result': 'ステップフォーム(完成)', |
| | | 'menu.form.advanced-form': '高度なフォーム', |
| | | 'menu.list': 'リスト', |
| | | 'menu.list.table-list': '検索テーブル', |
| | | 'menu.list.basic-list': '基本リスト', |
| | | 'menu.list.card-list': 'カードリスト', |
| | | 'menu.list.search-list': '検索リスト', |
| | | 'menu.list.search-list.articles': '検索リスト(記事)', |
| | | 'menu.list.search-list.projects': '検索リスト(プロジェクト)', |
| | | 'menu.list.search-list.applications': '検索リスト(アプリ)', |
| | | 'menu.profile': 'プロフィール', |
| | | 'menu.profile.basic': '基本プロフィール', |
| | | 'menu.profile.advanced': '高度なプロフィール', |
| | | 'menu.result': '結果', |
| | | 'menu.result.success': '成功', |
| | | 'menu.result.fail': '失敗', |
| | | 'menu.exception': '例外', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': 'トリガー', |
| | | 'menu.account': 'アカウント', |
| | | 'menu.account.center': 'アカウントセンター', |
| | | 'menu.account.settings': 'アカウント設定', |
| | | 'menu.account.trigger': 'トリガーエラー', |
| | | 'menu.account.logout': 'ログアウト', |
| | | 'menu.editor': 'グラフィックエディタ', |
| | | 'menu.editor.flow': 'フローエディタ', |
| | | 'menu.editor.mind': 'マインドエディター', |
| | | 'menu.editor.koni': 'コニエディター', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': 'Ant Designは、西湖区で最も影響力のあるWebデザイン仕様です。', |
| | | 'pages.login.accountLogin.tab': 'アカウントログイン', |
| | | 'pages.login.accountLogin.errorMessage': |
| | | 'ユーザー名/パスワードが正しくありません(admin/ant.design)', |
| | | 'pages.login.failure': 'ログインに失敗したら、もう一度試してください!', |
| | | 'pages.login.success': 'ログイン成功!', |
| | | 'pages.login.username.placeholder': 'ユーザー名:adminまたはuser', |
| | | 'pages.login.username.required': 'ユーザー名を入力してください!', |
| | | 'pages.login.password.placeholder': 'パスワード:ant.design', |
| | | 'pages.login.password.required': 'パスワードを入力してください!', |
| | | 'pages.login.phoneLogin.tab': '電話ログイン', |
| | | 'pages.login.phoneLogin.errorMessage': '検証コードエラー', |
| | | 'pages.login.phoneNumber.placeholder': '電話番号', |
| | | 'pages.login.phoneNumber.required': '電話番号を入力してください!', |
| | | 'pages.login.phoneNumber.invalid': '電話番号が無効です!', |
| | | 'pages.login.captcha.placeholder': '確認コード', |
| | | 'pages.login.captcha.required': '確認コードを入力してください!', |
| | | 'pages.login.phoneLogin.getVerificationCode': '確認コードを取得', |
| | | 'pages.getCaptchaSecondText': '秒', |
| | | 'pages.login.rememberMe': 'Remember me', |
| | | 'pages.login.forgotPassword': 'パスワードをお忘れですか?', |
| | | 'pages.login.submit': 'ログイン', |
| | | 'pages.login.loginWith': 'その他のログイン方法:', |
| | | 'pages.login.registerAccount': 'アカウント登録', |
| | | 'pages.welcome.link': 'ようこそ', |
| | | 'pages.welcome.alertMessage': 'より高速で強力な頑丈なコンポーネントがリリースされました。', |
| | | 'pages.admin.subPage.title': 'このページは管理者のみが表示できます', |
| | | 'pages.admin.subPage.alertMessage': |
| | | 'Umi uiがリリースされました。npm run uiを使用して体験してください。', |
| | | 'pages.searchTable.createForm.newRule': '新しいルール', |
| | | 'pages.searchTable.updateForm.ruleConfig': 'ルール構成', |
| | | 'pages.searchTable.updateForm.basicConfig': '基本情報', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': 'ルール名', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': 'ルール名を入力してください!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': 'ルールの説明', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '5文字以上入力してください', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': '5文字以上のルールの説明を入力してください!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': 'プロパティの構成', |
| | | 'pages.searchTable.updateForm.object': '監視対象', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': 'ルールテンプレート', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': 'ルールタイプ', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': 'スケジュール期間の設定', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '開始時間', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': '開始時間を選択してください!', |
| | | 'pages.searchTable.titleDesc': '説明', |
| | | 'pages.searchTable.ruleName': 'ルール名が必要です', |
| | | 'pages.searchTable.titleCallNo': 'サービスコール数', |
| | | 'pages.searchTable.titleStatus': 'ステータス', |
| | | 'pages.searchTable.nameStatus.default': 'デフォルト', |
| | | 'pages.searchTable.nameStatus.running': '起動中', |
| | | 'pages.searchTable.nameStatus.online': 'オンライン', |
| | | 'pages.searchTable.nameStatus.abnormal': '異常', |
| | | 'pages.searchTable.titleUpdatedAt': '最終スケジュール', |
| | | 'pages.searchTable.exception': '例外の理由を入力してください!', |
| | | 'pages.searchTable.titleOption': 'オプション', |
| | | 'pages.searchTable.config': '構成', |
| | | 'pages.searchTable.subscribeAlert': 'アラートを購読する', |
| | | 'pages.searchTable.title': 'お問い合わせフォーム', |
| | | 'pages.searchTable.new': '新しい', |
| | | 'pages.searchTable.chosen': '選んだ項目', |
| | | 'pages.searchTable.item': '項目', |
| | | 'pages.searchTable.totalServiceCalls': 'サービスコールの総数', |
| | | 'pages.searchTable.tenThousand': '万', |
| | | 'pages.searchTable.batchDeletion': 'バッチ削除', |
| | | 'pages.searchTable.batchApproval': 'バッチ承認', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': 'あなたは今オフラインです', |
| | | 'app.pwa.serviceworker.updated': '新しいコンテンツが利用可能です', |
| | | 'app.pwa.serviceworker.updated.hint': |
| | | '現在のページをリロードするには、「更新」ボタンを押してください', |
| | | 'app.pwa.serviceworker.updated.ok': 'リフレッシュ', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': 'ページスタイル設定', |
| | | 'app.setting.pagestyle.dark': 'ダークスタイル', |
| | | 'app.setting.pagestyle.light': 'ライトスタイル', |
| | | 'app.setting.content-width': 'コンテンツの幅', |
| | | 'app.setting.content-width.fixed': '固定', |
| | | 'app.setting.content-width.fluid': '流体', |
| | | 'app.setting.themecolor': 'テーマカラー', |
| | | 'app.setting.themecolor.dust': 'ダストレッド', |
| | | 'app.setting.themecolor.volcano': 'ボルケ-ノ', |
| | | 'app.setting.themecolor.sunset': 'サンセットオレンジ', |
| | | 'app.setting.themecolor.cyan': 'シアン', |
| | | 'app.setting.themecolor.green': 'ポーラーグリーン', |
| | | 'app.setting.themecolor.daybreak': '夜明けの青(デフォルト)', |
| | | 'app.setting.themecolor.geekblue': 'ギーク ブルー', |
| | | 'app.setting.themecolor.purple': 'ゴールデンパープル', |
| | | 'app.setting.navigationmode': 'ナビゲーションモード', |
| | | 'app.setting.sidemenu': 'サイドメニューのレイアウト', |
| | | 'app.setting.topmenu': 'トップメニューのレイアウト', |
| | | 'app.setting.fixedheader': '固定ヘッダー', |
| | | 'app.setting.fixedsidebar': '固定サイドバー', |
| | | 'app.setting.fixedsidebar.hint': 'サイドメニューのレイアウトで動作します', |
| | | 'app.setting.hideheader': 'スクロール時の非表示ヘッダー', |
| | | 'app.setting.hideheader.hint': '非表示ヘッダーが有効になっている場合に機能します', |
| | | 'app.setting.othersettings': 'その他の設定', |
| | | 'app.setting.weakmode': 'ウィークモード', |
| | | 'app.setting.copy': 'コピー設定', |
| | | 'app.setting.copyinfo': |
| | | 'コピーが成功しました。src/models/setting.jsのdefaultSettingsを置き換えてください', |
| | | 'app.setting.production.hint': '設定パネルは開発環境でのみ表示されます。手動で変更してください', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': '基本設定', |
| | | 'app.settings.menuMap.security': 'セキュリティ設定', |
| | | 'app.settings.menuMap.binding': 'アカウントのバインド', |
| | | 'app.settings.menuMap.notification': '新しいメッセージの通知', |
| | | 'app.settings.basic.avatar': 'アバター', |
| | | 'app.settings.basic.change-avatar': 'アバターを変更する', |
| | | 'app.settings.basic.email': 'メール', |
| | | 'app.settings.basic.email-message': 'メールアドレスを入力してください!', |
| | | 'app.settings.basic.userName': 'ニックネーム', |
| | | 'app.settings.basic.userName-message': 'ニックネームを入力してください!', |
| | | 'app.settings.basic.profile': '個人プロフィール', |
| | | 'app.settings.basic.profile-message': '個人プロフィールを入力してください!', |
| | | 'app.settings.basic.profile-placeholder': '自己紹介', |
| | | 'app.settings.basic.country': '国/地域', |
| | | 'app.settings.basic.country-message': 'あなたの国を入力してください!', |
| | | 'app.settings.basic.geographic': '州または市', |
| | | 'app.settings.basic.geographic-message': '地理情報を入力してください!', |
| | | 'app.settings.basic.address': '住所', |
| | | 'app.settings.basic.address-message': '住所を入力してください!', |
| | | 'app.settings.basic.phone': '電話番号', |
| | | 'app.settings.basic.phone-message': '電話番号を入力してください!', |
| | | 'app.settings.basic.update': '更新情報', |
| | | 'app.settings.security.strong': '強い', |
| | | 'app.settings.security.medium': 'ミディアム', |
| | | 'app.settings.security.weak': '弱い', |
| | | 'app.settings.security.password': 'アカウントパスワード', |
| | | 'app.settings.security.password-description': '現在のパスワードの強度', |
| | | 'app.settings.security.phone': 'セキュリティ電話番号', |
| | | 'app.settings.security.phone-description': 'バインドされた電話番号', |
| | | 'app.settings.security.question': '秘密の質問', |
| | | 'app.settings.security.question-description': |
| | | 'セキュリティの質問が設定されてません。セキュリティポリシーはアカウントのセキュリティを効果的に保護できます', |
| | | 'app.settings.security.email': 'バックアップメール', |
| | | 'app.settings.security.email-description': 'バインドされたメール', |
| | | 'app.settings.security.mfa': '多要素認証デバイス', |
| | | 'app.settings.security.mfa-description': |
| | | 'バインドされていない多要素認証デバイスは、バインド後、2回確認できます', |
| | | 'app.settings.security.modify': '変更する', |
| | | 'app.settings.security.set': 'セットする', |
| | | 'app.settings.security.bind': 'バインド', |
| | | 'app.settings.binding.taobao': 'タオバオをバインドする', |
| | | 'app.settings.binding.taobao-description': '現在バインドされていないタオバオアカウント', |
| | | 'app.settings.binding.alipay': 'アリペイをバインドする', |
| | | 'app.settings.binding.alipay-description': '現在バインドされていないアリペイアカウント', |
| | | 'app.settings.binding.dingding': 'ディントークをバインドする', |
| | | 'app.settings.binding.dingding-description': '現在バインドされていないディントークアカウント', |
| | | 'app.settings.binding.bind': 'バインド', |
| | | 'app.settings.notification.password': 'アカウントパスワード', |
| | | 'app.settings.notification.password-description': |
| | | '他のユーザーからのメッセージは、ステーションレターの形式で通知されます', |
| | | 'app.settings.notification.messages': 'システムメッセージ', |
| | | 'app.settings.notification.messages-description': |
| | | 'システムメッセージは、ステーションレターの形式で通知されます', |
| | | 'app.settings.notification.todo': 'To Do(用事) 通知', |
| | | 'app.settings.notification.todo-description': 'To Doタスクは、内部レターの形式で通知されます', |
| | | 'app.settings.open': '開く', |
| | | 'app.settings.close': '閉じる', |
| | | }; |
New file |
| | |
| | | import component from './pt-BR/component'; |
| | | import globalHeader from './pt-BR/globalHeader'; |
| | | import menu from './pt-BR/menu'; |
| | | import pages from './pt-BR/pages'; |
| | | import pwa from './pt-BR/pwa'; |
| | | import settingDrawer from './pt-BR/settingDrawer'; |
| | | import settings from './pt-BR/settings'; |
| | | |
| | | export default { |
| | | 'navBar.lang': 'Idiomas', |
| | | 'layout.user.link.help': 'ajuda', |
| | | 'layout.user.link.privacy': 'política de privacidade', |
| | | 'layout.user.link.terms': 'termos de serviços', |
| | | 'app.preview.down.block': 'Download this page to your local project', |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | ...pages, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': 'Expandir', |
| | | 'component.tagSelect.collapse': 'Diminuir', |
| | | 'component.tagSelect.all': 'Todas', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': 'Busca', |
| | | 'component.globalHeader.search.example1': 'Exemplo de busca 1', |
| | | 'component.globalHeader.search.example2': 'Exemplo de busca 2', |
| | | 'component.globalHeader.search.example3': 'Exemplo de busca 3', |
| | | 'component.globalHeader.help': 'Ajuda', |
| | | 'component.globalHeader.notification': 'Notificação', |
| | | 'component.globalHeader.notification.empty': 'Você visualizou todas as notificações.', |
| | | 'component.globalHeader.message': 'Mensagem', |
| | | 'component.globalHeader.message.empty': 'Você visualizou todas as mensagens.', |
| | | 'component.globalHeader.event': 'Evento', |
| | | 'component.globalHeader.event.empty': 'Você visualizou todos os eventos.', |
| | | 'component.noticeIcon.clear': 'Limpar', |
| | | 'component.noticeIcon.cleared': 'Limpo', |
| | | 'component.noticeIcon.empty': 'Sem notificações', |
| | | 'component.noticeIcon.view-more': 'Veja mais', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': 'Welcome', |
| | | 'menu.more-blocks': 'More Blocks', |
| | | 'menu.home': 'Início', |
| | | 'menu.admin': 'Admin', |
| | | 'menu.admin.sub-page': 'Sub-Page', |
| | | 'menu.login': 'Login', |
| | | 'menu.register': 'Registro', |
| | | 'menu.register-result': 'Resultado de registro', |
| | | 'menu.dashboard': 'Dashboard', |
| | | 'menu.dashboard.analysis': 'Análise', |
| | | 'menu.dashboard.monitor': 'Monitor', |
| | | 'menu.dashboard.workplace': 'Ambiente de Trabalho', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': 'Formulário', |
| | | 'menu.form.basic-form': 'Formulário Básico', |
| | | 'menu.form.step-form': 'Formulário Assistido', |
| | | 'menu.form.step-form.info': 'Formulário Assistido(gravar informações de transferência)', |
| | | 'menu.form.step-form.confirm': 'Formulário Assistido(confirmar informações de transferência)', |
| | | 'menu.form.step-form.result': 'Formulário Assistido(finalizado)', |
| | | 'menu.form.advanced-form': 'Formulário Avançado', |
| | | 'menu.list': 'Lista', |
| | | 'menu.list.table-list': 'Tabela de Busca', |
| | | 'menu.list.basic-list': 'Lista Básica', |
| | | 'menu.list.card-list': 'Lista de Card', |
| | | 'menu.list.search-list': 'Lista de Busca', |
| | | 'menu.list.search-list.articles': 'Lista de Busca(artigos)', |
| | | 'menu.list.search-list.projects': 'Lista de Busca(projetos)', |
| | | 'menu.list.search-list.applications': 'Lista de Busca(aplicações)', |
| | | 'menu.profile': 'Perfil', |
| | | 'menu.profile.basic': 'Perfil Básico', |
| | | 'menu.profile.advanced': 'Perfil Avançado', |
| | | 'menu.result': 'Resultado', |
| | | 'menu.result.success': 'Sucesso', |
| | | 'menu.result.fail': 'Falha', |
| | | 'menu.exception': 'Exceção', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': 'Disparar', |
| | | 'menu.account': 'Conta', |
| | | 'menu.account.center': 'Central da Conta', |
| | | 'menu.account.settings': 'Configurar Conta', |
| | | 'menu.account.trigger': 'Disparar Erro', |
| | | 'menu.account.logout': 'Sair', |
| | | 'menu.editor': 'Graphic Editor', |
| | | 'menu.editor.flow': 'Flow Editor', |
| | | 'menu.editor.mind': 'Mind Editor', |
| | | 'menu.editor.koni': 'Koni Editor', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': |
| | | 'Ant Design é a especificação de web design mais influente no distrito de Xihu', |
| | | 'pages.login.accountLogin.tab': 'Login da conta', |
| | | 'pages.login.accountLogin.errorMessage': 'usuário/senha incorreto(admin/ant.design)', |
| | | 'pages.login.failure': 'Login falhou, por favor tente novamente!', |
| | | 'pages.login.success': 'Login efetuado com sucesso!', |
| | | 'pages.login.username.placeholder': 'Usuário: admin or user', |
| | | 'pages.login.username.required': 'Por favor insira seu usuário!', |
| | | 'pages.login.password.placeholder': 'Senha: ant.design', |
| | | 'pages.login.password.required': 'Por favor insira sua senha!', |
| | | 'pages.login.phoneLogin.tab': 'Login com Telefone', |
| | | 'pages.login.phoneLogin.errorMessage': 'Erro de Código de Verificação', |
| | | 'pages.login.phoneNumber.placeholder': 'Telefone', |
| | | 'pages.login.phoneNumber.required': 'Por favor entre com seu telefone!', |
| | | 'pages.login.phoneNumber.invalid': 'Telefone é inválido!', |
| | | 'pages.login.captcha.placeholder': 'Código de Verificação', |
| | | 'pages.login.captcha.required': 'Por favor entre com o código de verificação!', |
| | | 'pages.login.phoneLogin.getVerificationCode': 'Obter Código', |
| | | 'pages.getCaptchaSecondText': 'seg(s)', |
| | | 'pages.login.rememberMe': 'Lembre-me', |
| | | 'pages.login.forgotPassword': 'Perdeu a Senha ?', |
| | | 'pages.login.submit': 'Enviar', |
| | | 'pages.login.loginWith': 'Login com :', |
| | | 'pages.login.registerAccount': 'Registra Conta', |
| | | 'pages.welcome.link': 'Bem-vindo', |
| | | 'pages.welcome.alertMessage': 'Componentes pesados mais rápidos e mais fortes foram lançados.', |
| | | 'pages.admin.subPage.title': 'Esta página só pode ser vista pelo Admin', |
| | | 'pages.admin.subPage.alertMessage': |
| | | 'O Umi ui foi lançado, bem-vindo ao usar o npm run ui para iniciar a experiência.', |
| | | 'pages.searchTable.createForm.newRule': 'Neva Regra', |
| | | 'pages.searchTable.updateForm.ruleConfig': 'Configuração de Regra', |
| | | 'pages.searchTable.updateForm.basicConfig': 'Informação básica', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': 'Nome da Regra', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': 'Por favor entre com o nome da regra!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': 'Descrição da Regra', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': |
| | | 'Por favor insira ao menos cinco caracteres', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': |
| | | 'Insira uma descrição de regra de pelo menos cinco caracteres!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': 'Configurar Propriedades', |
| | | 'pages.searchTable.updateForm.object': 'Objeto de Monitoramento', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': 'Modelo de Regra', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': 'Tipo de Regra', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': 'Definir Período de Agendamento', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Hora de Início', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': |
| | | 'Por favor selecione um horáriod e início!', |
| | | 'pages.searchTable.titleDesc': 'Descrição', |
| | | 'pages.searchTable.ruleName': 'O nome da regra é obrigatório', |
| | | 'pages.searchTable.titleCallNo': 'Número de chamadas de serviço', |
| | | 'pages.searchTable.titleStatus': 'Status', |
| | | 'pages.searchTable.nameStatus.default': 'padrão', |
| | | 'pages.searchTable.nameStatus.running': 'executando', |
| | | 'pages.searchTable.nameStatus.online': 'online', |
| | | 'pages.searchTable.nameStatus.abnormal': 'anormal', |
| | | 'pages.searchTable.titleUpdatedAt': 'Última programação em', |
| | | 'pages.searchTable.exception': 'Por favor, indique o motivo da exceção!', |
| | | 'pages.searchTable.titleOption': 'Opção', |
| | | 'pages.searchTable.config': 'Configuração', |
| | | 'pages.searchTable.subscribeAlert': 'Inscreva-se para receber alertas', |
| | | 'pages.searchTable.title': 'Formulário de Consulta', |
| | | 'pages.searchTable.new': 'Novo', |
| | | 'pages.searchTable.chosen': 'selecionado', |
| | | 'pages.searchTable.item': 'item', |
| | | 'pages.searchTable.totalServiceCalls': 'Número total de chamadas de serviço', |
| | | 'pages.searchTable.tenThousand': '0000', |
| | | 'pages.searchTable.batchDeletion': 'deleção em lote', |
| | | 'pages.searchTable.batchApproval': 'aprovação em lote', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': 'Você está offline agora', |
| | | 'app.pwa.serviceworker.updated': 'Novo conteúdo está disponível', |
| | | 'app.pwa.serviceworker.updated.hint': |
| | | 'Por favor, pressione o botão "Atualizar" para recarregar a página atual', |
| | | 'app.pwa.serviceworker.updated.ok': 'Atualizar', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': 'Configuração de estilo da página', |
| | | 'app.setting.pagestyle.dark': 'Dark style', |
| | | 'app.setting.pagestyle.light': 'Light style', |
| | | 'app.setting.content-width': 'Largura do conteúdo', |
| | | 'app.setting.content-width.fixed': 'Fixo', |
| | | 'app.setting.content-width.fluid': 'Fluido', |
| | | 'app.setting.themecolor': 'Cor do Tema', |
| | | 'app.setting.themecolor.dust': 'Dust Red', |
| | | 'app.setting.themecolor.volcano': 'Volcano', |
| | | 'app.setting.themecolor.sunset': 'Sunset Orange', |
| | | 'app.setting.themecolor.cyan': 'Cyan', |
| | | 'app.setting.themecolor.green': 'Polar Green', |
| | | 'app.setting.themecolor.daybreak': 'Daybreak Blue (default)', |
| | | 'app.setting.themecolor.geekblue': 'Geek Glue', |
| | | 'app.setting.themecolor.purple': 'Golden Purple', |
| | | 'app.setting.navigationmode': 'Modo de Navegação', |
| | | 'app.setting.sidemenu': 'Layout do Menu Lateral', |
| | | 'app.setting.topmenu': 'Layout do Menu Superior', |
| | | 'app.setting.fixedheader': 'Cabeçalho fixo', |
| | | 'app.setting.fixedsidebar': 'Barra lateral fixa', |
| | | 'app.setting.fixedsidebar.hint': 'Funciona no layout do menu lateral', |
| | | 'app.setting.hideheader': 'Esconder o cabeçalho quando rolar', |
| | | 'app.setting.hideheader.hint': 'Funciona quando o esconder cabeçalho está abilitado', |
| | | 'app.setting.othersettings': 'Outras configurações', |
| | | 'app.setting.weakmode': 'Weak Mode', |
| | | 'app.setting.copy': 'Copiar Configuração', |
| | | 'app.setting.copyinfo': |
| | | 'copiado com sucesso,por favor trocar o defaultSettings em src/models/setting.js', |
| | | 'app.setting.production.hint': |
| | | 'O painel de configuração apenas é exibido no ambiente de desenvolvimento, por favor modifique manualmente o', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': 'Configurações Básicas', |
| | | 'app.settings.menuMap.security': 'Configurações de Segurança', |
| | | 'app.settings.menuMap.binding': 'Vinculação de Conta', |
| | | 'app.settings.menuMap.notification': 'Mensagens de Notificação', |
| | | 'app.settings.basic.avatar': 'Avatar', |
| | | 'app.settings.basic.change-avatar': 'Alterar avatar', |
| | | 'app.settings.basic.email': 'Email', |
| | | 'app.settings.basic.email-message': 'Por favor insira seu email!', |
| | | 'app.settings.basic.userName': 'Nome de usuário', |
| | | 'app.settings.basic.userName-message': 'Por favor insira seu nome de usuário!', |
| | | 'app.settings.basic.profile': 'Perfil pessoal', |
| | | 'app.settings.basic.profile-message': 'Por favor insira seu perfil pessoal!', |
| | | 'app.settings.basic.profile-placeholder': 'Breve introdução sua', |
| | | 'app.settings.basic.country': 'País/Região', |
| | | 'app.settings.basic.country-message': 'Por favor insira país!', |
| | | 'app.settings.basic.geographic': 'Província, estado ou cidade', |
| | | 'app.settings.basic.geographic-message': 'Por favor insira suas informações geográficas!', |
| | | 'app.settings.basic.address': 'Endereço', |
| | | 'app.settings.basic.address-message': 'Por favor insira seu endereço!', |
| | | 'app.settings.basic.phone': 'Número de telefone', |
| | | 'app.settings.basic.phone-message': 'Por favor insira seu número de telefone!', |
| | | 'app.settings.basic.update': 'Atualizar Informações', |
| | | 'app.settings.security.strong': 'Forte', |
| | | 'app.settings.security.medium': 'Média', |
| | | 'app.settings.security.weak': 'Fraca', |
| | | 'app.settings.security.password': 'Senha da Conta', |
| | | 'app.settings.security.password-description': 'Força da senha', |
| | | 'app.settings.security.phone': 'Telefone de Seguraça', |
| | | 'app.settings.security.phone-description': 'Telefone vinculado', |
| | | 'app.settings.security.question': 'Pergunta de Segurança', |
| | | 'app.settings.security.question-description': |
| | | 'A pergunta de segurança não está definida e a política de segurança pode proteger efetivamente a segurança da conta', |
| | | 'app.settings.security.email': 'Email de Backup', |
| | | 'app.settings.security.email-description': 'Email vinculado', |
| | | 'app.settings.security.mfa': 'Dispositivo MFA', |
| | | 'app.settings.security.mfa-description': |
| | | 'O dispositivo MFA não vinculado, após a vinculação, pode ser confirmado duas vezes', |
| | | 'app.settings.security.modify': 'Modificar', |
| | | 'app.settings.security.set': 'Atribuir', |
| | | 'app.settings.security.bind': 'Vincular', |
| | | 'app.settings.binding.taobao': 'Vincular Taobao', |
| | | 'app.settings.binding.taobao-description': 'Atualmente não vinculado à conta Taobao', |
| | | 'app.settings.binding.alipay': 'Vincular Alipay', |
| | | 'app.settings.binding.alipay-description': 'Atualmente não vinculado à conta Alipay', |
| | | 'app.settings.binding.dingding': 'Vincular DingTalk', |
| | | 'app.settings.binding.dingding-description': 'Atualmente não vinculado à conta DingTalk', |
| | | 'app.settings.binding.bind': 'Vincular', |
| | | 'app.settings.notification.password': 'Senha da Conta', |
| | | 'app.settings.notification.password-description': |
| | | 'Mensagens de outros usuários serão notificadas na forma de uma estação de letra', |
| | | 'app.settings.notification.messages': 'Mensagens de Sistema', |
| | | 'app.settings.notification.messages-description': |
| | | 'Mensagens de sistema serão notificadas na forma de uma estação de letra', |
| | | 'app.settings.notification.todo': 'Notificação de To-do', |
| | | 'app.settings.notification.todo-description': |
| | | 'A lista de to-do será notificada na forma de uma estação de letra', |
| | | 'app.settings.open': 'Aberto', |
| | | 'app.settings.close': 'Fechado', |
| | | }; |
New file |
| | |
| | | import component from './zh-CN/component'; |
| | | import globalHeader from './zh-CN/globalHeader'; |
| | | import menu from './zh-CN/menu'; |
| | | import pages from './zh-CN/pages'; |
| | | import pwa from './zh-CN/pwa'; |
| | | import settingDrawer from './zh-CN/settingDrawer'; |
| | | import settings from './zh-CN/settings'; |
| | | |
| | | export default { |
| | | 'navBar.lang': '语言', |
| | | 'layout.user.link.help': '帮助', |
| | | 'layout.user.link.privacy': '隐私', |
| | | 'layout.user.link.terms': '条款', |
| | | 'app.copyright.produced': '喜望软件前端开发部出品', |
| | | 'app.preview.down.block': '下载此页面到本地项目', |
| | | 'app.welcome.link.fetch-blocks': '获取全部区块', |
| | | 'app.welcome.link.block-list': '基于 block 开发,快速构建标准页面', |
| | | ...pages, |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': '展开', |
| | | 'component.tagSelect.collapse': '收起', |
| | | 'component.tagSelect.all': '全部', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': '站内搜索', |
| | | 'component.globalHeader.search.example1': '搜索提示一', |
| | | 'component.globalHeader.search.example2': '搜索提示二', |
| | | 'component.globalHeader.search.example3': '搜索提示三', |
| | | 'component.globalHeader.help': '使用文档', |
| | | 'component.globalHeader.notification': '通知', |
| | | 'component.globalHeader.notification.empty': '你已查看所有通知', |
| | | 'component.globalHeader.message': '消息', |
| | | 'component.globalHeader.message.empty': '您已读完所有消息', |
| | | 'component.globalHeader.event': '待办', |
| | | 'component.globalHeader.event.empty': '你已完成所有待办', |
| | | 'component.noticeIcon.clear': '清空', |
| | | 'component.noticeIcon.cleared': '清空了', |
| | | 'component.noticeIcon.empty': '暂无数据', |
| | | 'component.noticeIcon.view-more': '查看更多', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': '欢迎', |
| | | 'menu.more-blocks': '更多区块', |
| | | 'menu.home': '首页', |
| | | 'menu.admin': '管理页', |
| | | 'menu.admin.sub-page': '二级管理页', |
| | | 'menu.login': '登录', |
| | | 'menu.register': '注册', |
| | | 'menu.register-result': '注册结果', |
| | | 'menu.dashboard': 'Dashboard', |
| | | 'menu.dashboard.analysis': '分析页', |
| | | 'menu.dashboard.monitor': '监控页', |
| | | 'menu.dashboard.workplace': '工作台', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': '表单页', |
| | | 'menu.form.basic-form': '基础表单', |
| | | 'menu.form.step-form': '分步表单', |
| | | 'menu.form.step-form.info': '分步表单(填写转账信息)', |
| | | 'menu.form.step-form.confirm': '分步表单(确认转账信息)', |
| | | 'menu.form.step-form.result': '分步表单(完成)', |
| | | 'menu.form.advanced-form': '高级表单', |
| | | 'menu.list': '列表页', |
| | | 'menu.list.table-list': '查询表格', |
| | | 'menu.list.basic-list': '标准列表', |
| | | 'menu.list.card-list': '卡片列表', |
| | | 'menu.list.search-list': '搜索列表', |
| | | 'menu.list.search-list.articles': '搜索列表(文章)', |
| | | 'menu.list.search-list.projects': '搜索列表(项目)', |
| | | 'menu.list.search-list.applications': '搜索列表(应用)', |
| | | 'menu.profile': '详情页', |
| | | 'menu.profile.basic': '基础详情页', |
| | | 'menu.profile.advanced': '高级详情页', |
| | | 'menu.result': '结果页', |
| | | 'menu.result.success': '成功页', |
| | | 'menu.result.fail': '失败页', |
| | | 'menu.exception': '异常页', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': '触发错误', |
| | | 'menu.account': '个人页', |
| | | 'menu.account.center': '个人中心', |
| | | 'menu.account.settings': '个人设置', |
| | | 'menu.account.trigger': '触发报错', |
| | | 'menu.account.logout': '退出登录', |
| | | 'menu.editor': '图形编辑器', |
| | | 'menu.editor.flow': '流程编辑器', |
| | | 'menu.editor.mind': '脑图编辑器', |
| | | 'menu.editor.koni': '拓扑编辑器', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': 'Ant Design 是西湖区最具影响力的 Web 设计规范', |
| | | 'pages.login.accountLogin.tab': '账户密码登录', |
| | | 'pages.login.accountLogin.errorMessage': '错误的用户名和密码(admin/ant.design)', |
| | | 'pages.login.failure': '登录失败,请重试!', |
| | | 'pages.login.success': '登录成功!', |
| | | 'pages.login.username.placeholder': '用户名: admin or user', |
| | | 'pages.login.username.required': '账号是必填项!', |
| | | 'pages.login.password.placeholder': '密码: ant.design', |
| | | 'pages.login.password.required': '密码是必填项!', |
| | | 'pages.login.phoneLogin.tab': '手机号登录', |
| | | 'pages.login.phoneLogin.errorMessage': '验证码错误', |
| | | 'pages.login.phoneNumber.placeholder': '请输入手机号!', |
| | | 'pages.login.phoneNumber.required': '手机号是必填项!', |
| | | 'pages.login.phoneNumber.invalid': '不合法的手机号!', |
| | | 'pages.login.captcha.placeholder': '请输入验证码!', |
| | | 'pages.login.captcha.required': '验证码是必填项!', |
| | | 'pages.login.phoneLogin.getVerificationCode': '获取验证码', |
| | | 'pages.getCaptchaSecondText': '秒后重新获取', |
| | | 'pages.login.rememberMe': '自动登录', |
| | | 'pages.login.forgotPassword': '忘记密码 ?', |
| | | 'pages.login.submit': '登录', |
| | | 'pages.login.loginWith': '其他登录方式 :', |
| | | 'pages.login.registerAccount': '注册账户', |
| | | 'pages.welcome.link': '欢迎使用', |
| | | 'pages.welcome.alertMessage': '更快更强的重型组件,已经发布。', |
| | | 'pages.admin.subPage.title': ' 这个页面只有 admin 权限才能查看', |
| | | 'pages.admin.subPage.alertMessage': 'umi ui 现已发布,欢迎使用 npm run ui 启动体验。', |
| | | 'pages.searchTable.createForm.newRule': '新建规则', |
| | | 'pages.searchTable.updateForm.ruleConfig': '规则配置', |
| | | 'pages.searchTable.updateForm.basicConfig': '基本信息', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': '规则名称', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': '请输入规则名称!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': '规则描述', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '请输入至少五个字符', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': '请输入至少五个字符的规则描述!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': '配置规则属性', |
| | | 'pages.searchTable.updateForm.object': '监控对象', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': '规则模板', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': '规则类型', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': '设定调度周期', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '开始时间', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': '请选择开始时间!', |
| | | 'pages.searchTable.titleDesc': '描述', |
| | | 'pages.searchTable.ruleName': '规则名称为必填项', |
| | | 'pages.searchTable.titleCallNo': '服务调用次数', |
| | | 'pages.searchTable.titleStatus': '状态', |
| | | 'pages.searchTable.nameStatus.default': '关闭', |
| | | 'pages.searchTable.nameStatus.running': '运行中', |
| | | 'pages.searchTable.nameStatus.online': '已上线', |
| | | 'pages.searchTable.nameStatus.abnormal': '异常', |
| | | 'pages.searchTable.titleUpdatedAt': '上次调度时间', |
| | | 'pages.searchTable.exception': '请输入异常原因!', |
| | | 'pages.searchTable.titleOption': '操作', |
| | | 'pages.searchTable.config': '配置', |
| | | 'pages.searchTable.subscribeAlert': '订阅警报', |
| | | 'pages.searchTable.title': '查询表格', |
| | | 'pages.searchTable.new': '新建', |
| | | 'pages.searchTable.chosen': '已选择', |
| | | 'pages.searchTable.item': '项', |
| | | 'pages.searchTable.totalServiceCalls': '服务调用次数总计', |
| | | 'pages.searchTable.tenThousand': '万', |
| | | 'pages.searchTable.batchDeletion': '批量删除', |
| | | 'pages.searchTable.batchApproval': '批量审批', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': '当前处于离线状态', |
| | | 'app.pwa.serviceworker.updated': '有新内容', |
| | | 'app.pwa.serviceworker.updated.hint': '请点击“刷新”按钮或者手动刷新页面', |
| | | 'app.pwa.serviceworker.updated.ok': '刷新', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': '整体风格设置', |
| | | 'app.setting.pagestyle.dark': '暗色菜单风格', |
| | | 'app.setting.pagestyle.light': '亮色菜单风格', |
| | | 'app.setting.content-width': '内容区域宽度', |
| | | 'app.setting.content-width.fixed': '定宽', |
| | | 'app.setting.content-width.fluid': '流式', |
| | | 'app.setting.themecolor': '主题色', |
| | | 'app.setting.themecolor.dust': '薄暮', |
| | | 'app.setting.themecolor.volcano': '火山', |
| | | 'app.setting.themecolor.sunset': '日暮', |
| | | 'app.setting.themecolor.cyan': '明青', |
| | | 'app.setting.themecolor.green': '极光绿', |
| | | 'app.setting.themecolor.daybreak': '拂晓蓝(默认)', |
| | | 'app.setting.themecolor.geekblue': '极客蓝', |
| | | 'app.setting.themecolor.purple': '酱紫', |
| | | 'app.setting.navigationmode': '导航模式', |
| | | 'app.setting.sidemenu': '侧边菜单布局', |
| | | 'app.setting.topmenu': '顶部菜单布局', |
| | | 'app.setting.fixedheader': '固定 Header', |
| | | 'app.setting.fixedsidebar': '固定侧边菜单', |
| | | 'app.setting.fixedsidebar.hint': '侧边菜单布局时可配置', |
| | | 'app.setting.hideheader': '下滑时隐藏 Header', |
| | | 'app.setting.hideheader.hint': '固定 Header 时可配置', |
| | | 'app.setting.othersettings': '其他设置', |
| | | 'app.setting.weakmode': '色弱模式', |
| | | 'app.setting.copy': '拷贝设置', |
| | | 'app.setting.copyinfo': '拷贝成功,请到 config/defaultSettings.js 中替换默认配置', |
| | | 'app.setting.production.hint': |
| | | '配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': '基本设置', |
| | | 'app.settings.menuMap.security': '安全设置', |
| | | 'app.settings.menuMap.binding': '账号绑定', |
| | | 'app.settings.menuMap.notification': '新消息通知', |
| | | 'app.settings.basic.avatar': '头像', |
| | | 'app.settings.basic.change-avatar': '更换头像', |
| | | 'app.settings.basic.email': '邮箱', |
| | | 'app.settings.basic.email-message': '请输入您的邮箱!', |
| | | 'app.settings.basic.userName': '昵称', |
| | | 'app.settings.basic.userName-message': '请输入您的昵称!', |
| | | 'app.settings.basic.profile': '个人简介', |
| | | 'app.settings.basic.profile-message': '请输入个人简介!', |
| | | 'app.settings.basic.profile-placeholder': '个人简介', |
| | | 'app.settings.basic.country': '国家/地区', |
| | | 'app.settings.basic.country-message': '请输入您的国家或地区!', |
| | | 'app.settings.basic.geographic': '所在省市', |
| | | 'app.settings.basic.geographic-message': '请输入您的所在省市!', |
| | | 'app.settings.basic.address': '街道地址', |
| | | 'app.settings.basic.address-message': '请输入您的街道地址!', |
| | | 'app.settings.basic.phone': '联系电话', |
| | | 'app.settings.basic.phone-message': '请输入您的联系电话!', |
| | | 'app.settings.basic.update': '更新基本信息', |
| | | 'app.settings.security.strong': '强', |
| | | 'app.settings.security.medium': '中', |
| | | 'app.settings.security.weak': '弱', |
| | | 'app.settings.security.password': '账户密码', |
| | | 'app.settings.security.password-description': '当前密码强度', |
| | | 'app.settings.security.phone': '密保手机', |
| | | 'app.settings.security.phone-description': '已绑定手机', |
| | | 'app.settings.security.question': '密保问题', |
| | | 'app.settings.security.question-description': '未设置密保问题,密保问题可有效保护账户安全', |
| | | 'app.settings.security.email': '备用邮箱', |
| | | 'app.settings.security.email-description': '已绑定邮箱', |
| | | 'app.settings.security.mfa': 'MFA 设备', |
| | | 'app.settings.security.mfa-description': '未绑定 MFA 设备,绑定后,可以进行二次确认', |
| | | 'app.settings.security.modify': '修改', |
| | | 'app.settings.security.set': '设置', |
| | | 'app.settings.security.bind': '绑定', |
| | | 'app.settings.binding.taobao': '绑定淘宝', |
| | | 'app.settings.binding.taobao-description': '当前未绑定淘宝账号', |
| | | 'app.settings.binding.alipay': '绑定支付宝', |
| | | 'app.settings.binding.alipay-description': '当前未绑定支付宝账号', |
| | | 'app.settings.binding.dingding': '绑定钉钉', |
| | | 'app.settings.binding.dingding-description': '当前未绑定钉钉账号', |
| | | 'app.settings.binding.bind': '绑定', |
| | | 'app.settings.notification.password': '账户密码', |
| | | 'app.settings.notification.password-description': '其他用户的消息将以站内信的形式通知', |
| | | 'app.settings.notification.messages': '系统消息', |
| | | 'app.settings.notification.messages-description': '系统消息将以站内信的形式通知', |
| | | 'app.settings.notification.todo': '待办任务', |
| | | 'app.settings.notification.todo-description': '待办任务将以站内信的形式通知', |
| | | 'app.settings.open': '开', |
| | | 'app.settings.close': '关', |
| | | }; |
New file |
| | |
| | | import component from './zh-TW/component'; |
| | | import globalHeader from './zh-TW/globalHeader'; |
| | | import menu from './zh-TW/menu'; |
| | | import pwa from './zh-TW/pwa'; |
| | | import settingDrawer from './zh-TW/settingDrawer'; |
| | | import settings from './zh-TW/settings'; |
| | | |
| | | export default { |
| | | 'navBar.lang': '語言', |
| | | 'layout.user.link.help': '幫助', |
| | | 'layout.user.link.privacy': '隱私', |
| | | 'layout.user.link.terms': '條款', |
| | | 'app.preview.down.block': '下載此頁面到本地項目', |
| | | ...globalHeader, |
| | | ...menu, |
| | | ...settingDrawer, |
| | | ...settings, |
| | | ...pwa, |
| | | ...component, |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.tagSelect.expand': '展開', |
| | | 'component.tagSelect.collapse': '收起', |
| | | 'component.tagSelect.all': '全部', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'component.globalHeader.search': '站內搜索', |
| | | 'component.globalHeader.search.example1': '搜索提示壹', |
| | | 'component.globalHeader.search.example2': '搜索提示二', |
| | | 'component.globalHeader.search.example3': '搜索提示三', |
| | | 'component.globalHeader.help': '使用手冊', |
| | | 'component.globalHeader.notification': '通知', |
| | | 'component.globalHeader.notification.empty': '妳已查看所有通知', |
| | | 'component.globalHeader.message': '消息', |
| | | 'component.globalHeader.message.empty': '您已讀完所有消息', |
| | | 'component.globalHeader.event': '待辦', |
| | | 'component.globalHeader.event.empty': '妳已完成所有待辦', |
| | | 'component.noticeIcon.clear': '清空', |
| | | 'component.noticeIcon.cleared': '清空了', |
| | | 'component.noticeIcon.empty': '暫無資料', |
| | | 'component.noticeIcon.view-more': '查看更多', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'menu.welcome': '歡迎', |
| | | 'menu.more-blocks': '更多區塊', |
| | | 'menu.home': '首頁', |
| | | 'menu.admin': '权限', |
| | | 'menu.admin.sub-page': '二级管理页', |
| | | 'menu.login': '登錄', |
| | | 'menu.register': '註冊', |
| | | 'menu.register-result': '註冊結果', |
| | | 'menu.dashboard': 'Dashboard', |
| | | 'menu.dashboard.analysis': '分析頁', |
| | | 'menu.dashboard.monitor': '監控頁', |
| | | 'menu.dashboard.workplace': '工作臺', |
| | | 'menu.exception.403': '403', |
| | | 'menu.exception.404': '404', |
| | | 'menu.exception.500': '500', |
| | | 'menu.form': '表單頁', |
| | | 'menu.form.basic-form': '基礎表單', |
| | | 'menu.form.step-form': '分步表單', |
| | | 'menu.form.step-form.info': '分步表單(填寫轉賬信息)', |
| | | 'menu.form.step-form.confirm': '分步表單(確認轉賬信息)', |
| | | 'menu.form.step-form.result': '分步表單(完成)', |
| | | 'menu.form.advanced-form': '高級表單', |
| | | 'menu.list': '列表頁', |
| | | 'menu.list.table-list': '查詢表格', |
| | | 'menu.list.basic-list': '標淮列表', |
| | | 'menu.list.card-list': '卡片列表', |
| | | 'menu.list.search-list': '搜索列表', |
| | | 'menu.list.search-list.articles': '搜索列表(文章)', |
| | | 'menu.list.search-list.projects': '搜索列表(項目)', |
| | | 'menu.list.search-list.applications': '搜索列表(應用)', |
| | | 'menu.profile': '詳情頁', |
| | | 'menu.profile.basic': '基礎詳情頁', |
| | | 'menu.profile.advanced': '高級詳情頁', |
| | | 'menu.result': '結果頁', |
| | | 'menu.result.success': '成功頁', |
| | | 'menu.result.fail': '失敗頁', |
| | | 'menu.exception': '异常页', |
| | | 'menu.exception.not-permission': '403', |
| | | 'menu.exception.not-find': '404', |
| | | 'menu.exception.server-error': '500', |
| | | 'menu.exception.trigger': '触发错误', |
| | | 'menu.account': '個人頁', |
| | | 'menu.account.center': '個人中心', |
| | | 'menu.account.settings': '個人設置', |
| | | 'menu.account.trigger': '觸發報錯', |
| | | 'menu.account.logout': '退出登錄', |
| | | 'menu.editor': '圖形編輯器', |
| | | 'menu.editor.flow': '流程編輯器', |
| | | 'menu.editor.mind': '腦圖編輯器', |
| | | 'menu.editor.koni': '拓撲編輯器', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'pages.layouts.userLayout.title': 'Ant Design 是西湖區最具影響力的 Web 設計規範', |
| | | 'pages.login.accountLogin.tab': '賬戶密碼登錄', |
| | | 'pages.login.accountLogin.errorMessage': '錯誤的用戶名和密碼(admin/ant.design)', |
| | | 'pages.login.failure': '登錄失敗,請重試!', |
| | | 'pages.login.success': '登錄成功!', |
| | | 'pages.login.username.placeholder': '用戶名: admin or user', |
| | | 'pages.login.username.required': '用戶名是必填項!', |
| | | 'pages.login.password.placeholder': '密碼: ant.design', |
| | | 'pages.login.password.required': '密碼是必填項!', |
| | | 'pages.login.phoneLogin.tab': '手機號登錄', |
| | | 'pages.login.phoneLogin.errorMessage': '驗證碼錯誤', |
| | | 'pages.login.phoneNumber.placeholder': '請輸入手機號!', |
| | | 'pages.login.phoneNumber.required': '手機號是必填項!', |
| | | 'pages.login.phoneNumber.invalid': '不合法的手機號!', |
| | | 'pages.login.captcha.placeholder': '請輸入驗證碼!', |
| | | 'pages.login.captcha.required': '驗證碼是必填項!', |
| | | 'pages.login.phoneLogin.getVerificationCode': '獲取驗證碼', |
| | | 'pages.getCaptchaSecondText': '秒後重新獲取', |
| | | 'pages.login.rememberMe': '自動登錄', |
| | | 'pages.login.forgotPassword': '忘記密碼 ?', |
| | | 'pages.login.submit': '登錄', |
| | | 'pages.login.loginWith': '其他登錄方式 :', |
| | | 'pages.login.registerAccount': '註冊賬戶', |
| | | 'pages.welcome.link': '歡迎使用', |
| | | 'pages.welcome.alertMessage': '更快更強的重型組件,已經發布。', |
| | | 'pages.admin.subPage.title': '這個頁面只有 admin 權限才能查看', |
| | | 'pages.admin.subPage.alertMessage': 'umi ui 現已發佈,歡迎使用 npm run ui 啓動體驗。', |
| | | 'pages.searchTable.createForm.newRule': '新建規則', |
| | | 'pages.searchTable.updateForm.ruleConfig': '規則配置', |
| | | 'pages.searchTable.updateForm.basicConfig': '基本信息', |
| | | 'pages.searchTable.updateForm.ruleName.nameLabel': '規則名稱', |
| | | 'pages.searchTable.updateForm.ruleName.nameRules': '請輸入規則名稱!', |
| | | 'pages.searchTable.updateForm.ruleDesc.descLabel': '規則描述', |
| | | 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '請輸入至少五個字符', |
| | | 'pages.searchTable.updateForm.ruleDesc.descRules': '請輸入至少五個字符的規則描述!', |
| | | 'pages.searchTable.updateForm.ruleProps.title': '配置規則屬性', |
| | | 'pages.searchTable.updateForm.object': '監控對象', |
| | | 'pages.searchTable.updateForm.ruleProps.templateLabel': '規則模板', |
| | | 'pages.searchTable.updateForm.ruleProps.typeLabel': '規則類型', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.title': '設定調度週期', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '開始時間', |
| | | 'pages.searchTable.updateForm.schedulingPeriod.timeRules': '請選擇開始時間!', |
| | | 'pages.searchTable.titleDesc': '描述', |
| | | 'pages.searchTable.ruleName': '規則名稱爲必填項', |
| | | 'pages.searchTable.titleCallNo': '服務調用次數', |
| | | 'pages.searchTable.titleStatus': '狀態', |
| | | 'pages.searchTable.nameStatus.default': '關閉', |
| | | 'pages.searchTable.nameStatus.running': '運行中', |
| | | 'pages.searchTable.nameStatus.online': '已上線', |
| | | 'pages.searchTable.nameStatus.abnormal': '異常', |
| | | 'pages.searchTable.titleUpdatedAt': '上次調度時間', |
| | | 'pages.searchTable.exception': '請輸入異常原因!', |
| | | 'pages.searchTable.titleOption': '操作', |
| | | 'pages.searchTable.config': '配置', |
| | | 'pages.searchTable.subscribeAlert': '訂閱警報', |
| | | 'pages.searchTable.title': '查詢表格', |
| | | 'pages.searchTable.new': '新建', |
| | | 'pages.searchTable.chosen': '已選擇', |
| | | 'pages.searchTable.item': '項', |
| | | 'pages.searchTable.totalServiceCalls': '服務調用次數總計', |
| | | 'pages.searchTable.tenThousand': '萬', |
| | | 'pages.searchTable.batchDeletion': '批量刪除', |
| | | 'pages.searchTable.batchApproval': '批量審批', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.pwa.offline': '當前處於離線狀態', |
| | | 'app.pwa.serviceworker.updated': '有新內容', |
| | | 'app.pwa.serviceworker.updated.hint': '請點擊“刷新”按鈕或者手動刷新頁面', |
| | | 'app.pwa.serviceworker.updated.ok': '刷新', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.setting.pagestyle': '整體風格設置', |
| | | 'app.setting.pagestyle.dark': '暗色菜單風格', |
| | | 'app.setting.pagestyle.light': '亮色菜單風格', |
| | | 'app.setting.content-width': '內容區域寬度', |
| | | 'app.setting.content-width.fixed': '定寬', |
| | | 'app.setting.content-width.fluid': '流式', |
| | | 'app.setting.themecolor': '主題色', |
| | | 'app.setting.themecolor.dust': '薄暮', |
| | | 'app.setting.themecolor.volcano': '火山', |
| | | 'app.setting.themecolor.sunset': '日暮', |
| | | 'app.setting.themecolor.cyan': '明青', |
| | | 'app.setting.themecolor.green': '極光綠', |
| | | 'app.setting.themecolor.daybreak': '拂曉藍(默認)', |
| | | 'app.setting.themecolor.geekblue': '極客藍', |
| | | 'app.setting.themecolor.purple': '醬紫', |
| | | 'app.setting.navigationmode': '導航模式', |
| | | 'app.setting.sidemenu': '側邊菜單布局', |
| | | 'app.setting.topmenu': '頂部菜單布局', |
| | | 'app.setting.fixedheader': '固定 Header', |
| | | 'app.setting.fixedsidebar': '固定側邊菜單', |
| | | 'app.setting.fixedsidebar.hint': '側邊菜單布局時可配置', |
| | | 'app.setting.hideheader': '下滑時隱藏 Header', |
| | | 'app.setting.hideheader.hint': '固定 Header 時可配置', |
| | | 'app.setting.othersettings': '其他設置', |
| | | 'app.setting.weakmode': '色弱模式', |
| | | 'app.setting.copy': '拷貝設置', |
| | | 'app.setting.copyinfo': '拷貝成功,請到 config/defaultSettings.js 中替換默認配置', |
| | | 'app.setting.production.hint': |
| | | '配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件', |
| | | }; |
New file |
| | |
| | | export default { |
| | | 'app.settings.menuMap.basic': '基本設置', |
| | | 'app.settings.menuMap.security': '安全設置', |
| | | 'app.settings.menuMap.binding': '賬號綁定', |
| | | 'app.settings.menuMap.notification': '新消息通知', |
| | | 'app.settings.basic.avatar': '頭像', |
| | | 'app.settings.basic.change-avatar': '更換頭像', |
| | | 'app.settings.basic.email': '郵箱', |
| | | 'app.settings.basic.email-message': '請輸入您的郵箱!', |
| | | 'app.settings.basic.userName': '昵稱', |
| | | 'app.settings.basic.userName-message': '請輸入您的昵稱!', |
| | | 'app.settings.basic.profile': '個人簡介', |
| | | 'app.settings.basic.profile-message': '請輸入個人簡介!', |
| | | 'app.settings.basic.profile-placeholder': '個人簡介', |
| | | 'app.settings.basic.country': '國家/地區', |
| | | 'app.settings.basic.country-message': '請輸入您的國家或地區!', |
| | | 'app.settings.basic.geographic': '所在省市', |
| | | 'app.settings.basic.geographic-message': '請輸入您的所在省市!', |
| | | 'app.settings.basic.address': '街道地址', |
| | | 'app.settings.basic.address-message': '請輸入您的街道地址!', |
| | | 'app.settings.basic.phone': '聯系電話', |
| | | 'app.settings.basic.phone-message': '請輸入您的聯系電話!', |
| | | 'app.settings.basic.update': '更新基本信息', |
| | | 'app.settings.security.strong': '強', |
| | | 'app.settings.security.medium': '中', |
| | | 'app.settings.security.weak': '弱', |
| | | 'app.settings.security.password': '賬戶密碼', |
| | | 'app.settings.security.password-description': '當前密碼強度', |
| | | 'app.settings.security.phone': '密保手機', |
| | | 'app.settings.security.phone-description': '已綁定手機', |
| | | 'app.settings.security.question': '密保問題', |
| | | 'app.settings.security.question-description': '未設置密保問題,密保問題可有效保護賬戶安全', |
| | | 'app.settings.security.email': '備用郵箱', |
| | | 'app.settings.security.email-description': '已綁定郵箱', |
| | | 'app.settings.security.mfa': 'MFA 設備', |
| | | 'app.settings.security.mfa-description': '未綁定 MFA 設備,綁定後,可以進行二次確認', |
| | | 'app.settings.security.modify': '修改', |
| | | 'app.settings.security.set': '設置', |
| | | 'app.settings.security.bind': '綁定', |
| | | 'app.settings.binding.taobao': '綁定淘寶', |
| | | 'app.settings.binding.taobao-description': '當前未綁定淘寶賬號', |
| | | 'app.settings.binding.alipay': '綁定支付寶', |
| | | 'app.settings.binding.alipay-description': '當前未綁定支付寶賬號', |
| | | 'app.settings.binding.dingding': '綁定釘釘', |
| | | 'app.settings.binding.dingding-description': '當前未綁定釘釘賬號', |
| | | 'app.settings.binding.bind': '綁定', |
| | | 'app.settings.notification.password': '賬戶密碼', |
| | | 'app.settings.notification.password-description': '其他用戶的消息將以站內信的形式通知', |
| | | 'app.settings.notification.messages': '系統消息', |
| | | 'app.settings.notification.messages-description': '系統消息將以站內信的形式通知', |
| | | 'app.settings.notification.todo': '待辦任務', |
| | | 'app.settings.notification.todo-description': '待辦任務將以站內信的形式通知', |
| | | 'app.settings.open': '開', |
| | | 'app.settings.close': '關', |
| | | }; |
New file |
| | |
| | | { |
| | | "name": "Ant Design Pro", |
| | | "short_name": "Ant Design Pro", |
| | | "display": "standalone", |
| | | "start_url": "./?utm_source=homescreen", |
| | | "theme_color": "#002140", |
| | | "background_color": "#001529", |
| | | "icons": [ |
| | | { |
| | | "src": "icons/icon-192x192.png", |
| | | "sizes": "192x192" |
| | | }, |
| | | { |
| | | "src": "icons/icon-128x128.png", |
| | | "sizes": "128x128" |
| | | }, |
| | | { |
| | | "src": "icons/icon-512x512.png", |
| | | "sizes": "512x512" |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | import { history } from '@umijs/max'; |
| | | import { Button, Result } from 'antd'; |
| | | import React from 'react'; |
| | | |
| | | const NoFoundPage: React.FC = () => ( |
| | | <Result |
| | | status="404" |
| | | title="404" |
| | | subTitle="Sorry, the page you visited does not exist." |
| | | extra={ |
| | | <Button type="primary" onClick={() => history.push('/')}> |
| | | Back Home |
| | | </Button> |
| | | } |
| | | /> |
| | | ); |
| | | |
| | | export default NoFoundPage; |
New file |
| | |
| | | import { LockOutlined, SafetyOutlined, UserOutlined } from '@ant-design/icons'; |
| | | import { ProForm, ProFormCaptcha, ProFormText } from '@ant-design/pro-components'; |
| | | import { Modal } from 'antd'; |
| | | import { forwardRef, useImperativeHandle, useRef } from 'react'; |
| | | import { sendMessage } from './service.js'; |
| | | |
| | | const editPwd = ({ visible, onSave, onCancel }, ref) => { |
| | | const captchaRef = useRef(); |
| | | const form = useRef(); |
| | | /** |
| | | * 确定按钮事件 |
| | | */ |
| | | const okHandle = () => { |
| | | form.current.validateFields().then((values) => { |
| | | delete values.oldPassword |
| | | onSave(values); |
| | | }); |
| | | }; |
| | | |
| | | useImperativeHandle(ref, () => { |
| | | return { |
| | | refreshData: (data) => { |
| | | form.resetFields(); |
| | | form.setFieldsValue(data); |
| | | setEditData(data); |
| | | }, |
| | | clean: () => { |
| | | form.resetFields(); |
| | | }, |
| | | }; |
| | | }); |
| | | |
| | | return ( |
| | | <Modal |
| | | getContainer={false} |
| | | width="25%" |
| | | destroyOnClose |
| | | title={'修改密码'} |
| | | open={visible} |
| | | onCancel={() => onCancel(false)} |
| | | onOk={okHandle} |
| | | > |
| | | <ProForm |
| | | title="新建表单" |
| | | formRef={form} |
| | | submitter={{ |
| | | render: (props, doms) => { |
| | | return []; |
| | | }, |
| | | }} |
| | | > |
| | | <ProFormText |
| | | name="phone" |
| | | fieldProps={{ |
| | | prefix: <UserOutlined />, |
| | | }} |
| | | placeholder="请输入账号" |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | message: '请输入账号', |
| | | }, |
| | | { pattern: /^1[0-9][0-9]\d{8}$/, message: '请输入正确的手机号' }, |
| | | ]} |
| | | /> |
| | | <ProFormCaptcha |
| | | onGetCaptcha={() => { |
| | | return new Promise((resolve, reject) => { |
| | | form.current |
| | | .validateFields(['phone']) |
| | | .then(async (value) => { |
| | | let success = await sendMessage({ |
| | | phone : value.phone, |
| | | }); |
| | | if (success.code == '200') { |
| | | resolve(); |
| | | } else { |
| | | reject(); |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | reject(); |
| | | }); |
| | | }); |
| | | }} |
| | | onTiming={(count) => { |
| | | }} |
| | | placeholder="请输入验证码" |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | message: '请输入验证码', |
| | | }, |
| | | ]} |
| | | fieldRef={captchaRef} |
| | | fieldProps={{ |
| | | prefix: <SafetyOutlined />, |
| | | }} |
| | | name="phoneCode" |
| | | /> |
| | | <ProFormText.Password |
| | | name="oldPassword" |
| | | fieldProps={{ |
| | | size: 'large', |
| | | prefix: <LockOutlined />, |
| | | }} |
| | | placeholder="请输入新密码" |
| | | rules={[ |
| | | { |
| | | validator: (rule, value) => { |
| | | return new Promise((resolve, reject) => { |
| | | if (!value) { |
| | | reject('请输入新密码'); |
| | | } |
| | | resolve(''); |
| | | }); |
| | | }, |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormText.Password |
| | | name="password" |
| | | fieldProps={{ |
| | | size: 'large', |
| | | prefix: <LockOutlined />, |
| | | }} |
| | | placeholder="请确认新密码" |
| | | rules={[ |
| | | { |
| | | validator: (rule, value) => { |
| | | return new Promise((resolve, reject) => { |
| | | if (!value) { |
| | | reject('请再次输入新密码'); |
| | | } |
| | | if (value != form.current.getFieldValue('oldPassword')) { |
| | | reject('两次密码请保持一致'); |
| | | } |
| | | resolve(''); |
| | | }); |
| | | }, |
| | | }, |
| | | ]} |
| | | /> |
| | | </ProForm> |
| | | </Modal> |
| | | ); |
| | | }; |
| | | |
| | | export default forwardRef(editPwd); |
New file |
| | |
| | | import { login } from './service'; |
| | | import { sendRequest } from '@/utils/antdUtils'; |
| | | import { LockOutlined, SafetyOutlined, UserOutlined } from '@ant-design/icons'; |
| | | import { LoginForm, ProFormText } from '@ant-design/pro-components'; |
| | | import { useEmotionCss } from '@ant-design/use-emotion-css'; |
| | | import { Helmet, history, SelectLang, useIntl, useModel } from '@umijs/max'; |
| | | import { Alert, message, Space } from 'antd'; |
| | | // import CryptoJS from 'crypto-js'; |
| | | import React, { useRef, useState } from 'react'; |
| | | import Captcha from 'react-captcha-code'; |
| | | import { useAccess } from 'umi'; |
| | | import Settings from '../../../config/defaultSettings'; |
| | | import logo from '../../../public/logo/logo.png'; |
| | | import EditPwd from './editPwd.jsx'; |
| | | import { updatePwd } from './service.js'; |
| | | import './style.less'; |
| | | |
| | | const Lang = () => { |
| | | const langClassName = useEmotionCss(({ token }) => { |
| | | return { |
| | | width: 42, |
| | | height: 42, |
| | | lineHeight: '42px', |
| | | position: 'fixed', |
| | | right: 16, |
| | | borderRadius: token.borderRadius, |
| | | ':hover': { |
| | | backgroundColor: token.colorBgTextHover, |
| | | }, |
| | | }; |
| | | }); |
| | | |
| | | return ( |
| | | <div className={langClassName} data-lang> |
| | | {SelectLang && <SelectLang />} |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | const LoginMessage: React.FC<{ |
| | | content: string; |
| | | }> = ({ content }) => { |
| | | return ( |
| | | <Alert |
| | | style={{ |
| | | marginBottom: 24, |
| | | }} |
| | | message={content} |
| | | type="error" |
| | | showIcon |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | const Login: React.FC = (props) => { |
| | | const [userLoginState, setUserLoginState] = useState<API.LoginResult>({}); |
| | | const [modalVisible, handleModalVisible] = useState<Boolean>(false); |
| | | const [captcha, setCaptcha] = useState<String>(''); |
| | | const captchaRef = useRef(); |
| | | const [type, setType] = useState<string>('username'); |
| | | const { initialState, setInitialState } = useModel('@@initialState'); |
| | | const access = useAccess(); |
| | | const style1 = { |
| | | display: 'flex', |
| | | }; |
| | | const containerClassName = useEmotionCss(() => { |
| | | return { |
| | | height: '100vh', |
| | | overflow: 'auto', |
| | | }; |
| | | }); |
| | | |
| | | const intl = useIntl(); |
| | | |
| | | const getUserInfo = async (data: any) => { |
| | | const defaultLoginSuccessMessage = intl.formatMessage({ |
| | | id: 'pages.login.success', |
| | | defaultMessage: '登录成功!', |
| | | }); |
| | | const userInfo = data.userInfo.user |
| | | localStorage.setItem('userInfo', JSON.stringify(userInfo)); |
| | | |
| | | setInitialState((s: any) => ({ |
| | | ...s, |
| | | token: 'data.token.access_token', |
| | | currentUser: userInfo, |
| | | settings: Settings, |
| | | })); |
| | | |
| | | message.success(defaultLoginSuccessMessage); |
| | | const urlParams = new URL(window.location.href).searchParams; |
| | | setTimeout(() => { |
| | | history.push(urlParams.get('redirect') || '/Welcome'); |
| | | }, 0); |
| | | }; |
| | | |
| | | const filterPermission = (list: any[], arr: any[]) => { |
| | | return list.map((item) => { |
| | | if (item.children) { |
| | | filterPermission(item.children, arr); |
| | | } |
| | | arr.push(item); |
| | | return item; |
| | | }); |
| | | }; |
| | | |
| | | const handleClick = (e: String) => { |
| | | setCaptcha(e); |
| | | }; |
| | | // 生成随机字符串 |
| | | const generateRandomString = (length: number) => { |
| | | const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; |
| | | const str = []; |
| | | for (let i = 0; i < length; i++) { |
| | | const randomIndex = Math.floor(Math.random() * chars.length); |
| | | str.push(chars[randomIndex]); |
| | | } |
| | | return str.join(''); |
| | | }; |
| | | const handleSubmit = async (values: API.LoginParams) => { |
| | | try { |
| | | // 登录 |
| | | const res = await login({ ...values }); |
| | | if (res.code == 200) { |
| | | let accessObj: any = {}; |
| | | localStorage.setItem('access', JSON.stringify(accessObj)); |
| | | setInitialState((s: any) => ({ |
| | | ...s, |
| | | permission: accessObj, |
| | | })); |
| | | localStorage.setItem('token', res.token); |
| | | getUserInfo(res); |
| | | return; |
| | | } else { |
| | | throw new Error('登录发生错误'); |
| | | } |
| | | // 如果失败去设置用户错误信息 |
| | | // setUserLoginState(res); |
| | | } catch (error) { |
| | | captchaRef?.current?.refresh(); |
| | | } |
| | | }; |
| | | |
| | | const { status, type: loginType } = userLoginState; |
| | | |
| | | return ( |
| | | <div className={containerClassName}> |
| | | <div className="loginContent"> |
| | | <Helmet> |
| | | <title> |
| | | {intl.formatMessage({ |
| | | id: 'menu.login', |
| | | defaultMessage: '登录页', |
| | | })} |
| | | - {Settings.title} |
| | | </title> |
| | | </Helmet> |
| | | <Lang /> |
| | | |
| | | <div |
| | | style={{ |
| | | position: 'absolute', |
| | | top: '50%', |
| | | left: '50%', |
| | | transform: 'translate(-50%,-50%)', |
| | | display: 'flex', |
| | | flexDirection: 'column', |
| | | alignItems: 'center', |
| | | }} |
| | | > |
| | | {/* <div style={{ width: '787px' }}> |
| | | <h1 |
| | | style={{ fontSize: '48px', color: '#fff', textAlign: 'center', marginBottom: '48px' }} |
| | | > |
| | | 三个身边 |
| | | </h1> |
| | | </div> */} |
| | | <LoginForm |
| | | contentStyle={{ |
| | | minWidth: 280, |
| | | maxWidth: '75vw', |
| | | }} |
| | | logo={logo} |
| | | title="" |
| | | subTitle={' '} |
| | | initialValues={{ |
| | | autoLogin: true, |
| | | }} |
| | | // actions={[ |
| | | // <FormattedMessage |
| | | // key="loginWith" |
| | | // id="pages.login.loginWith" |
| | | // defaultMessage="其他登录方式" |
| | | // />, |
| | | // <ActionIcons key="icons" />, |
| | | // ]} |
| | | onFinish={async (values) => { |
| | | if (values.code != captcha) { |
| | | captchaRef?.current?.refresh(); |
| | | message.error('验证码输入错误'); |
| | | return; |
| | | } |
| | | delete values.code; |
| | | await handleSubmit(values as API.LoginParams); |
| | | }} |
| | | > |
| | | {/* <Tabs |
| | | activeKey={type} |
| | | onChange={setType} |
| | | centered |
| | | items={[ |
| | | { |
| | | key: 'username', |
| | | label: intl.formatMessage({ |
| | | id: 'pages.login.accountLogin.tab', |
| | | defaultMessage: '账户密码登录', |
| | | }), |
| | | }, |
| | | { |
| | | key: 'mobile', |
| | | label: intl.formatMessage({ |
| | | id: 'pages.login.phoneLogin.tab', |
| | | defaultMessage: '手机号登录', |
| | | }), |
| | | }, |
| | | ]} |
| | | /> */} |
| | | |
| | | {status === 'error' && loginType === 'username' && ( |
| | | <LoginMessage |
| | | content={intl.formatMessage({ |
| | | id: 'pages.login.accountLogin.errorMessage', |
| | | defaultMessage: '账户或密码错误(admin/ant.design)', |
| | | })} |
| | | /> |
| | | )} |
| | | {type === 'username' && ( |
| | | <> |
| | | <ProFormText |
| | | name="username" |
| | | fieldProps={{ |
| | | size: 'large', |
| | | prefix: <UserOutlined />, |
| | | }} |
| | | placeholder="请输入账号" |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | message: '请输入账号', |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormText.Password |
| | | name="password" |
| | | fieldProps={{ |
| | | size: 'large', |
| | | prefix: <LockOutlined />, |
| | | }} |
| | | placeholder="请输入密码" |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | message: '请输入密码', |
| | | }, |
| | | ]} |
| | | /> |
| | | <Space> |
| | | <ProFormText |
| | | name="code" |
| | | fieldProps={{ |
| | | size: 'large', |
| | | prefix: <SafetyOutlined />, |
| | | }} |
| | | placeholder="请输入验证码" |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | message: '请输入验证码', |
| | | }, |
| | | ]} |
| | | /> |
| | | <div style={{ marginBottom: '24px' }}> |
| | | <Captcha onChange={handleClick} ref={captchaRef} bgColor="#fff" /> |
| | | </div> |
| | | </Space> |
| | | |
| | | {/* <div |
| | | style={{ color: '#0086F6', textAlign: 'right', marginBottom: '21px' }} |
| | | className="login-form-forgot" |
| | | onClick={() => { |
| | | handleModalVisible(true); |
| | | }} |
| | | > |
| | | 修改密码 |
| | | </div> */} |
| | | </> |
| | | )} |
| | | |
| | | {status === 'error' && loginType === 'mobile' && <LoginMessage content="验证码错误" />} |
| | | {/* <ProFormText |
| | | fieldProps={{ |
| | | size: 'large', |
| | | prefix: <MobileOutlined />, |
| | | }} |
| | | name="mobile" |
| | | placeholder={intl.formatMessage({ |
| | | id: 'pages.login.phoneNumber.placeholder', |
| | | defaultMessage: '手机号', |
| | | })} |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | message: ( |
| | | <FormattedMessage |
| | | id="pages.login.phoneNumber.required" |
| | | defaultMessage="请输入手机号!" |
| | | /> |
| | | ), |
| | | }, |
| | | { |
| | | pattern: /^1\d{10}$/, |
| | | message: ( |
| | | <FormattedMessage |
| | | id="pages.login.phoneNumber.invalid" |
| | | defaultMessage="手机号格式错误!" |
| | | /> |
| | | ), |
| | | }, |
| | | ]} |
| | | /> */} |
| | | |
| | | {/* <div |
| | | style={{ |
| | | marginBottom: 24, |
| | | }} |
| | | > |
| | | <ProFormCheckbox noStyle name="autoLogin"> |
| | | <FormattedMessage id="pages.login.rememberMe" defaultMessage="自动登录" /> |
| | | </ProFormCheckbox> |
| | | <a |
| | | style={{ |
| | | float: 'right', |
| | | }} |
| | | > |
| | | <FormattedMessage id="pages.login.forgotPassword" defaultMessage="忘记密码" /> |
| | | </a> |
| | | </div> */} |
| | | </LoginForm> |
| | | </div> |
| | | <EditPwd |
| | | visible={modalVisible} |
| | | onSave={async (fileds: any) => { |
| | | const success = await sendRequest(updatePwd, fileds); |
| | | if (success) { |
| | | handleModalVisible(false); |
| | | } |
| | | }} |
| | | onCancel={() => handleModalVisible(false)} |
| | | /> |
| | | {/* <Footer /> */} |
| | | </div> |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | export default Login; |
New file |
| | |
| | | import { request } from '@umijs/max'; |
| | | /** |
| | | * *** |
| | | * @param user |
| | | * @returns {Promise<any>} |
| | | */ |
| | | export async function updatePwd(params) { |
| | | return request('/system/user/profile/updatePwd', { |
| | | method: 'POST', |
| | | params, |
| | | }); |
| | | } |
| | | /** |
| | | * *** |
| | | * @param user |
| | | * @returns {Promise<any>} |
| | | */ |
| | | export async function sendMessage(params) { |
| | | return request('/management/tUser/sendPhoneCode', { |
| | | method: 'GET', |
| | | params, |
| | | }); |
| | | } |
| | | |
| | | |
| | | export async function login(data) { |
| | | return request('/management/tUser/login', { |
| | | method: 'POST', |
| | | data, |
| | | }); |
| | | } |
New file |
| | |
| | | .ant-pro-form-login-container{ |
| | | background-color: #fff; |
| | | border-radius: 23px; |
| | | padding: 45px 60px; |
| | | } |
| | | |
| | | .ant-pro-form-login-header { |
| | | width: 190px; |
| | | height: 190px; |
| | | } |
| | | |
| | | |
| | | .ant-pro-form-login-top{ |
| | | width: 413px; |
| | | height: 167px; |
| | | margin-bottom: 64px; |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | |
| | | .ant-pro-form-login-logo { |
| | | width: 190px; |
| | | height: 190px; |
| | | overflow: hidden; |
| | | margin-inline-end:0px |
| | | |
| | | } |
New file |
| | |
| | | // @ts-ignore |
| | | /* eslint-disable */ |
| | | import { request } from '@umijs/max'; |
| | | |
| | | /** 获取当前的用户 GET /api/currentUser */ |
| | | export async function list(options) { |
| | | return request(`/base/user/list`, { |
| | | params:options, |
| | | method: 'GET', |
| | | ...(options || {}), |
| | | }); |
| | | } |
New file |
| | |
| | | import { Form, Input, Modal,Button } from 'antd'; |
| | | import { forwardRef, useImperativeHandle, useState } from 'react'; |
| | | |
| | | const formItemLayout = { |
| | | labelCol: { span: 7 }, |
| | | wrapperCol: { span: 12 }, |
| | | }; |
| | | |
| | | const AddEditView = ({ visible, onSave, onUpdate, onCancel }, ref) => { |
| | | const [form] = Form.useForm(); |
| | | const [editData, setEditData] = useState({}); |
| | | const [rolesList, setRolesList] = useState(); |
| | | |
| | | /** |
| | | * 确定按钮事件 |
| | | */ |
| | | const okHandle = () => { |
| | | form.validateFields().then((values) => { |
| | | if (editData.deptId) { |
| | | values.deptId = editData.deptId; |
| | | onUpdate(values); |
| | | } else { |
| | | onSave(values); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | useImperativeHandle(ref, () => { |
| | | return { |
| | | refreshData: (data) => { |
| | | form.resetFields(); |
| | | form.setFieldsValue(data); |
| | | setEditData(data); |
| | | }, |
| | | clean: () => { |
| | | form.resetFields(); |
| | | }, |
| | | }; |
| | | }); |
| | | |
| | | return ( |
| | | <Modal |
| | | getContainer={false} |
| | | width="25%" |
| | | destroyOnClose |
| | | title={editData.deptId ? '编辑职位' : '添加职位'} |
| | | open={visible} |
| | | onCancel={() => onCancel(false)} |
| | | footer={[ |
| | | <Button key="back" onClick={() => onCancel(false)}> |
| | | 关闭 |
| | | </Button>, |
| | | <Button key="submit" type="primary" onClick={okHandle}> |
| | | 确认 |
| | | </Button> |
| | | ]} |
| | | > |
| | | <Form layout="horizontal" {...formItemLayout} form={form} initialValues={{ isAuctioneer: 1 }}> |
| | | <Form.Item |
| | | name="deptName" |
| | | required |
| | | label="职位名称" |
| | | rules={[{ required: true, message: '请输入职位名称' }]} |
| | | > |
| | | <Input placeholder="请输入职位名称" /> |
| | | </Form.Item> |
| | | </Form> |
| | | </Modal> |
| | | ); |
| | | }; |
| | | |
| | | export default forwardRef(AddEditView); |
New file |
| | |
| | | import { buildProTableDataSource, sendRequest, showDelConfirm } from '@/utils/antdUtils'; |
| | | import { PageContainer, ProTable } from '@ant-design/pro-components'; |
| | | import { Button, InputNumber, Select, Space } from 'antd'; |
| | | import { useRef, useState } from 'react'; |
| | | import { Access, useAccess } from 'umi'; |
| | | import AddAndEdit from './components/addAndEdit'; |
| | | import { add, edit, del, getList, updateStatus, resetPaswword } from './service'; |
| | | const Account = () => { |
| | | const actionRef = useRef(); |
| | | const addViewRef = useRef(); |
| | | const [modalVisible, handleModalVisible] = useState(false); |
| | | const access = useAccess(); |
| | | |
| | | const columns = [ |
| | | { |
| | | title: '职位名称', |
| | | dataIndex: 'deptName', |
| | | }, |
| | | { |
| | | title: '操作', |
| | | hideInSearch: true, |
| | | render: (text, record) => { |
| | | return ( |
| | | <Space> |
| | | { |
| | | !record.admin && |
| | | <Button |
| | | type="link" |
| | | onClick={() => { |
| | | addViewRef.current.refreshData(record); |
| | | handleModalVisible(true); |
| | | }} |
| | | > |
| | | 编辑 |
| | | </Button> |
| | | } |
| | | { |
| | | !record.admin && |
| | | <Button |
| | | type="link" |
| | | onClick={() => { |
| | | showDelConfirm(async () => { |
| | | let status = await sendRequest(del, record.deptId); |
| | | if (status) { |
| | | actionRef.current.reload(); |
| | | } |
| | | }, '确认删除所选信息吗?'); |
| | | }} |
| | | > |
| | | 删除 |
| | | </Button> |
| | | } |
| | | </Space> |
| | | ); |
| | | }, |
| | | }, |
| | | ]; |
| | | return ( |
| | | <div> |
| | | <PageContainer header={{ |
| | | breadcrumb: {}, |
| | | }}> |
| | | <ProTable |
| | | rowKey="id" |
| | | actionRef={actionRef} |
| | | columns={columns} |
| | | pagination={false} |
| | | request={async(params) => { |
| | | return await buildProTableDataSource(getList, params); |
| | | }} |
| | | toolBarRender={(action, selectRows) => [ |
| | | <Space> |
| | | <Button |
| | | type="primary" |
| | | onClick={() => { |
| | | addViewRef.current.refreshData({}); |
| | | handleModalVisible(true); |
| | | }} |
| | | > |
| | | 添加 |
| | | </Button> |
| | | </Space>, |
| | | ]} |
| | | /> |
| | | <AddAndEdit |
| | | ref={addViewRef} |
| | | visible={modalVisible} |
| | | onCancel={() => handleModalVisible(false)} |
| | | onSave={async (fileds) => { |
| | | const success = await sendRequest(add, fileds); |
| | | if (success) { |
| | | handleModalVisible(false); |
| | | actionRef.current.reload(); |
| | | } |
| | | }} |
| | | onUpdate={async (fileds) => { |
| | | const success = await sendRequest(edit, fileds); |
| | | if (success) { |
| | | handleModalVisible(false); |
| | | actionRef.current.reload(); |
| | | } |
| | | }} |
| | | /> |
| | | </PageContainer> |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | export default Account; |
New file |
| | |
| | | import { request } from '@umijs/max'; |
| | | |
| | | // 分页获取部门列表 |
| | | export const getList = async (data) => { |
| | | return request(`/system/dept/list`, { |
| | | method: 'GET', |
| | | params:data |
| | | }); |
| | | } |
| | | |
| | | // 新增部门 |
| | | export const add = async (data) => { |
| | | return request('/system/dept', { |
| | | method: 'POST', |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | // 修改部门 |
| | | export const edit = async (data) => { |
| | | return request('/system/dept', { |
| | | method: 'PUT', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | // 删除部门管理 |
| | | export const del = async (data) => { |
| | | return request(`/system/dept/${data}`, { |
| | | method: 'DELETE', |
| | | }); |
| | | } |
| | | |
| | | |
New file |
| | |
| | | import { PageContainer } from '@ant-design/pro-components'; |
| | | import './index.less' |
| | | |
| | | const SystemSettings = () => { |
| | | return ( |
| | | <PageContainer title={''} className={'weclome'}> |
| | | <img src={require('../../../../public/logo/welcome.png')} style={{ width: "100%", height: "calc(100vh - 74px)" }} /> |
| | | |
| | | </PageContainer> |
| | | ) |
| | | } |
| | | export default SystemSettings |
New file |
| | |
| | | .weclome{ |
| | | |
| | | .ant-page-header { |
| | | display: none; |
| | | } |
| | | .ant-pro-page-container-children-container { |
| | | padding: unset !important; |
| | | // padding-left: 15px; |
| | | // padding-right: 15px; |
| | | } |
| | | } |
New file |
| | |
| | | import { showDelConfirm } from '@/utils/antdUtils'; |
| | | import { PageContainer, ProTable } from '@ant-design/pro-components'; |
| | | import { Button, Space, Form, InputNumber, Card } from 'antd'; |
| | | import { useRef, useState, useEffect } from 'react'; |
| | | import { Access, useAccess } from 'umi'; |
| | | import { sendRequest } from '@/utils/antdUtils'; |
| | | |
| | | |
| | | // import AddAndEdit from './components/addAndEdit'; |
| | | // import { getConfig, saveConfig } from './service'; |
| | | const TabPane = Tabs.TabPane; |
| | | const Account = () => { |
| | | const actionRef = useRef(); |
| | | const addViewRef = useRef(); |
| | | const addViewRef1 = useRef(); |
| | | const [form] = Form.useForm(); |
| | | const [tab, setTab] = useState('1'); |
| | | const [modalVisible, handleModalVisible] = useState(false); |
| | | const [selectedRowKeys, setSelectedRowKeys] = useState([]); |
| | | const changeStatusRef = useRef(); |
| | | const [addWarnVisible, handleAddWarnVisible] = useState(false); |
| | | const { RangePicker } = DatePicker; |
| | | const [dataSource, setDataSource] = useState([]); |
| | | const [data, setData] = useState([]); |
| | | const access = useAccess(); |
| | | |
| | | useEffect(() => { |
| | | }, []) |
| | | |
| | | const save = () => { |
| | | form.validateFields().then(async (values) => { |
| | | |
| | | }); |
| | | }; |
| | | |
| | | |
| | | |
| | | return ( |
| | | <div> |
| | | <PageContainer |
| | | header={{ |
| | | title: '述求事项配置', |
| | | breadcrumb: {}, |
| | | }} |
| | | > |
| | | <Card> |
| | | <Form scrollToFirstError form={form}> |
| | | <Card> |
| | | <div><span style={{ fontSize: '14px', fontWeight: 600 }}>*诉求处理时间配置: |
| | | </span><span style={{ marginLeft: 8, color: '#a5a5a5' }}>超过时间未处理诉求,系统自动对该事件承办者发送短信提醒,并知会至上一级管理层进行督办。 |
| | | </span></div> |
| | | <Form.Item label="市级账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入市级账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | |
| | | <Form.Item label="区县账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入区县账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | |
| | | <Form.Item label="街道账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入街道账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | <Form.Item label="社区账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入社区账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | <Form.Item label="党员账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入党员账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | </Card> |
| | | <Card> |
| | | <div><span style={{ fontSize: '14px', fontWeight: 600 }}>*时限临期提醒配置: |
| | | </span><span style={{ marginLeft: 8, color: '#a5a5a5' }}>超过时间未处理诉求,系统自动对该事件承办者发送短信提醒,并知会至上一级管理层进行督办。 |
| | | </span></div> |
| | | <Form.Item label="市级账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入市级账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | |
| | | <Form.Item label="区县账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入区县账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | |
| | | <Form.Item label="街道账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入街道账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | <Form.Item label="社区账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入社区账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | <Form.Item label="党员账号" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入党员账号' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | </Card> |
| | | <Card> |
| | | <div><span style={{ fontSize: '14px', fontWeight: 600 }}>*诉求处理时间: |
| | | </span><span style={{ marginLeft: 8, color: '#a5a5a5' }}>超过时间未处理诉求,系统自动对该事件承办者发送短信提醒,并知会至上一级管理层进行督办。 |
| | | </span></div> |
| | | <Form.Item label="添加后处理时间" name="isAuctioneer" rules={ |
| | | [{ required: true, message: '请输入添加后处理时间' }] |
| | | }> |
| | | <InputNumber precision={0} min={0} addonAfter="天内" ></InputNumber> |
| | | </Form.Item> |
| | | </Card> |
| | | </Form> |
| | | </Card> |
| | | </PageContainer> |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | export default Account; |
New file |
| | |
| | | import type { RequestOptions } from '@@/plugin-request/request'; |
| | | import type { RequestConfig } from '@umijs/max'; |
| | | import { message } from 'antd'; |
| | | import { history } from '@umijs/max'; |
| | | import CryptoJS from 'crypto-js'; |
| | | |
| | | // 错误处理方案: 错误类型 |
| | | enum ErrorShowType { |
| | | SILENT = 0, |
| | | WARN_MESSAGE = 1, |
| | | ERROR_MESSAGE = 2, |
| | | NOTIFICATION = 3, |
| | | REDIRECT = 9, |
| | | } |
| | | // 与后端约定的响应数据格式 |
| | | interface ResponseStructure { |
| | | success: boolean; |
| | | data: any; |
| | | errorCode?: number; |
| | | errorMessage?: string; |
| | | showType?: ErrorShowType; |
| | | } |
| | | /** |
| | | * @name 错误处理 |
| | | * pro 自带的错误处理, 可以在这里做自己的改动 |
| | | * @doc https://umijs.org/docs/max/request#配置 |
| | | */ |
| | | export const errorConfig: RequestConfig = { |
| | | baseURL: BASE_URL, |
| | | |
| | | // 请求拦截器 |
| | | requestInterceptors: [ |
| | | (config: RequestOptions) => { |
| | | const o = config |
| | | const Authorization = localStorage.getItem('token') || '' |
| | | |
| | | o.headers = { |
| | | ...config.headers, |
| | | Authorization, |
| | | } |
| | | // } |
| | | // 拦截请求配置,进行个性化处理。 |
| | | const url = config?.url |
| | | return { ...config, url }; |
| | | }, |
| | | ], |
| | | |
| | | // 响应拦截器 |
| | | responseInterceptors: [ |
| | | (response: any) => { |
| | | // 拦截响应数据,进行个性化处理 |
| | | const { data } = response as unknown as ResponseStructure; |
| | | if (data?.code === 103 || data?.code === 401) { |
| | | localStorage.clear() |
| | | history.replace('/login') |
| | | return Promise.resolve(response) |
| | | } |
| | | if (data?.code != 200) { |
| | | message.error(data.msg); |
| | | return Promise.reject(response) |
| | | } |
| | | if (data?.code == 500) { |
| | | message.error(data.msg); |
| | | return Promise.reject(response) |
| | | } |
| | | return Promise.resolve(response) |
| | | }, |
| | | ], |
| | | }; |
New file |
| | |
| | | /* eslint-disable no-restricted-globals */ |
| | | /* eslint-disable no-underscore-dangle */ |
| | | /* globals workbox */ |
| | | workbox.core.setCacheNameDetails({ |
| | | prefix: 'antd-pro', |
| | | suffix: 'v5', |
| | | }); |
| | | // Control all opened tabs ASAP |
| | | workbox.clientsClaim(); |
| | | |
| | | /** |
| | | * Use precaching list generated by workbox in build process. |
| | | * https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.precaching |
| | | */ |
| | | workbox.precaching.precacheAndRoute(self.__precacheManifest || []); |
| | | |
| | | /** |
| | | * Register a navigation route. |
| | | * https://developers.google.com/web/tools/workbox/modules/workbox-routing#how_to_register_a_navigation_route |
| | | */ |
| | | workbox.routing.registerNavigationRoute('/index.html'); |
| | | |
| | | /** |
| | | * Use runtime cache: |
| | | * https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.routing#.registerRoute |
| | | * |
| | | * Workbox provides all common caching strategies including CacheFirst, NetworkFirst etc. |
| | | * https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.strategies |
| | | */ |
| | | |
| | | /** Handle API requests */ |
| | | workbox.routing.registerRoute(/\/api\//, workbox.strategies.networkFirst()); |
| | | |
| | | /** Handle third party requests */ |
| | | workbox.routing.registerRoute( |
| | | /^https:\/\/gw\.alipayobjects\.com\//, |
| | | workbox.strategies.networkFirst(), |
| | | ); |
| | | workbox.routing.registerRoute( |
| | | /^https:\/\/cdnjs\.cloudflare\.com\//, |
| | | workbox.strategies.networkFirst(), |
| | | ); |
| | | workbox.routing.registerRoute(/\/color.less/, workbox.strategies.networkFirst()); |
| | | |
| | | /** Response to client after skipping waiting with MessageChannel */ |
| | | addEventListener('message', (event) => { |
| | | const replyPort = event.ports[0]; |
| | | const message = event.data; |
| | | if (replyPort && message && message.type === 'skip-waiting') { |
| | | event.waitUntil( |
| | | self.skipWaiting().then( |
| | | () => { |
| | | replyPort.postMessage({ |
| | | error: null, |
| | | }); |
| | | }, |
| | | (error) => { |
| | | replyPort.postMessage({ |
| | | error, |
| | | }); |
| | | }, |
| | | ), |
| | | ); |
| | | } |
| | | }); |
New file |
| | |
| | | declare module 'slash2'; |
| | | declare module '*.css'; |
| | | declare module '*.less'; |
| | | declare module '*.scss'; |
| | | declare module '*.sass'; |
| | | declare module '*.svg'; |
| | | declare module '*.png'; |
| | | declare module '*.jpg'; |
| | | declare module '*.jpeg'; |
| | | declare module '*.gif'; |
| | | declare module '*.bmp'; |
| | | declare module '*.tiff'; |
| | | declare module 'omit.js'; |
| | | declare module 'numeral'; |
| | | declare module '@antv/data-set'; |
| | | declare module 'mockjs'; |
| | | declare module 'react-fittext'; |
| | | declare module 'bizcharts-plugin-slider'; |
| | | |
| | | declare const REACT_APP_ENV: 'test' | 'dev' | 'pre' | false; |
New file |
| | |
| | | import { message, Modal } from 'antd'; |
| | | |
| | | const confirm = Modal.confirm; |
| | | |
| | | export function showConfirm(title, content, okHandler) { |
| | | confirm({ |
| | | title: title, |
| | | content: content, |
| | | onOk() { |
| | | okHandler(); |
| | | }, |
| | | onCancel() { }, |
| | | }); |
| | | } |
| | | |
| | | export function showDelConfirm(okHandler, content, confirmText, cancelText, titleText) { |
| | | confirm({ |
| | | className: 'del-confirm', |
| | | title: titleText || '确定要删除这条数据?', |
| | | content: content || '删除后不可恢复,请谨慎操作!', |
| | | okText: confirmText || '删除', |
| | | cancelText: cancelText || '取消', |
| | | okType: 'default', |
| | | icon: <div className='del-icon'>?</div>, |
| | | footer: (params) => { |
| | | return [params.props.children[0], params.props.children[1]]; |
| | | }, |
| | | onOk() { |
| | | okHandler(); |
| | | }, |
| | | onCancel() { |
| | | |
| | | }, |
| | | }); |
| | | } |
| | | // 转换成ProFormSelect可用的数据 |
| | | export async function buildProFormSelectDataSourceTwo(fun, params) { |
| | | const response = await fun(params); |
| | | const options = (response.data.records || response.data).map(item => { |
| | | return { |
| | | label: item.phone, |
| | | value: item.uid || item.id || item.roleId, |
| | | ...item |
| | | } |
| | | }) |
| | | return options; |
| | | } |
| | | |
| | | // 医废类型ProFormSelect |
| | | export async function buildProFormSelectDataSource(fun, params) { |
| | | const response = await fun(params); |
| | | const options = response.data.map(item => { |
| | | return { |
| | | label: item.dictLabel, |
| | | value: item.dictCode, |
| | | ...item |
| | | } |
| | | }) |
| | | return options; |
| | | } |
| | | |
| | | // 转换成ProFormSelect可用的数据 |
| | | export async function buildProFormSelectDataSourceCopy(fun, params) { |
| | | const response = await fun(params); |
| | | const options = response.data.map(item => { |
| | | return { |
| | | label: item.equipmentName, |
| | | value: item.id, |
| | | ...item |
| | | } |
| | | }) |
| | | return options; |
| | | } |
| | | |
| | | /** |
| | | * 服务端的分页数据转换成AntD的数据类型 |
| | | */ |
| | | export function pageData2Obj(pageData) { |
| | | return { |
| | | list: pageData.records || [], |
| | | pagination: { |
| | | total: pageData.total || 0, |
| | | pageSize: pageData.size || 10, |
| | | current: pageData.current || 0, |
| | | }, |
| | | }; |
| | | } |
| | | export async function buildProFormDataSource(fun, params) { |
| | | const response = await fun(params); |
| | | const data = Promise.resolve({ |
| | | ...response.data |
| | | }); |
| | | return data; |
| | | } |
| | | |
| | | export async function buildProFormDataSourceSpecial(fun, params) { |
| | | const response = await fun(params); |
| | | response.data.parkingDuration = response.data.parkingDuration || 0 + ' 分钟'; |
| | | const data = Promise.resolve({ |
| | | ...response.data |
| | | }); |
| | | return data; |
| | | } |
| | | |
| | | export async function buildProTableDataSource(fun, params) { |
| | | params.pageCurr = params.current; |
| | | delete params.current |
| | | const response = await fun(params); |
| | | const data = Promise.resolve({ |
| | | data: response.data.list || [], |
| | | total: response.data.total || 0, |
| | | success: true, |
| | | pageSize: response.data.size || 10, |
| | | pageCurr: response.data.pages || 0, |
| | | }); |
| | | return data; |
| | | } |
| | | |
| | | export async function buildTreeDataSource(func, params) { |
| | | const response = await func(params); |
| | | const data = Promise.resolve({ |
| | | data: response || [], |
| | | success: true, |
| | | }); |
| | | return data; |
| | | } |
| | | |
| | | export async function builDataSource(func, params) { |
| | | const response = await func(params); |
| | | const data = Promise.resolve({ |
| | | data: response || [], |
| | | success: true, |
| | | }); |
| | | return data; |
| | | } |
| | | |
| | | /** |
| | | * 统一处理返回结果信息 |
| | | */ |
| | | export function responseDataParse(response, callback) { |
| | | if (callback && typeof callback === 'function' && response) { |
| | | callback(response); // 返回结果 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 发送请求 |
| | | * @param func |
| | | * @param params |
| | | * @returns {Promise<boolean>} |
| | | */ |
| | | export async function sendRequest(func, params) { |
| | | const hide = message.loading('正在请求中'); |
| | | try { |
| | | const data = params instanceof Object ? { ...params } : params; |
| | | const res = await func(data); |
| | | hide(); |
| | | if (res.code == '200') { |
| | | message.success('操作成功'); |
| | | return true; |
| | | } else if (res.code == '602') { |
| | | |
| | | return res; |
| | | } else { |
| | | return false; |
| | | } |
| | | } catch (error) { |
| | | hide(); |
| | | return false; |
| | | } |
| | | } |
| | | /** |
| | | * GET下载 |
| | | * @param {*} url |
| | | */ |
| | | export function dowloadByGet(url) { |
| | | const eleLink = document.createElement('a'); |
| | | eleLink.style.display = 'none'; |
| | | // eleLink.target = "_blank" |
| | | eleLink.href = url; |
| | | // eleLink.href = record; |
| | | document.body.appendChild(eleLink); |
| | | eleLink.click(); |
| | | document.body.removeChild(eleLink); |
| | | } |
| | | /** |
| | | * POST方法下载 |
| | | * @param {*} params |
| | | */ |
| | | export async function downloadByPost(params) { |
| | | let form = document.createElement('form'); |
| | | form.style.display = 'none'; |
| | | form.action = `${api}tCmPaymentOrd/export`; |
| | | form.method = 'POST'; |
| | | document.body.appendChild(form); |
| | | // 动态创建input并给value赋值 |
| | | for (var key in params) { |
| | | var input = document.createElement('input'); |
| | | input.type = 'hidden'; |
| | | input.name = key; |
| | | input.value = params[key]; |
| | | form.appendChild(input); |
| | | } |
| | | form.submit(); |
| | | form.remove(); |
| | | } |
| | | |
| | | export const pageOption = { size: 10, current: 1 }; |
New file |
| | |
| | | export function printFile(html) { |
| | | if (!html) return; |
| | | let userAgent = navigator.userAgent; |
| | | html = "<style media='print'>.ant-image-mask{display: none;}@page {margin: 0mm; size: landscape;font-size: 10px;} body {padding: 10mm;} table, tbody, thead {width: 100% !important;} td, th {text-align: center;} colgroup {position: absolute; width: 100% !important;}</style><body>" + html + "</body>"; |
| | | if ( |
| | | (userAgent.indexOf("compatible") > -1 && |
| | | userAgent.indexOf("MSIE") > -1) || |
| | | userAgent.indexOf("Edge") > -1 || |
| | | (userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1) |
| | | ) { |
| | | // IE浏览器 |
| | | let page = window.open("", "_blank"); // 打开一个新窗口,用于打印 |
| | | page.document.write(html); // 写入打印页面的内容 |
| | | page.document.execCommand("print"); |
| | | page.close(); // 关闭打印窗口 |
| | | } else { |
| | | let doc = document.getElementById('printf'); |
| | | if (doc) { |
| | | document.getElementById("printElement").removeChild(doc) |
| | | } |
| | | let iframe = document.createElement("iframe"); |
| | | iframe.id = "printf"; |
| | | iframe.style.width = "0"; |
| | | iframe.style.height = "0"; |
| | | document.getElementById("printElement").appendChild(iframe); |
| | | iframe.contentWindow.document.write(html); |
| | | iframe.contentWindow.focus(); |
| | | iframe.contentWindow.print(); |
| | | } |
| | | } |
New file |
| | |
| | | import { request } from '@umijs/max'; |
| | | |
| | | //服务端上传(二进制字符串) |
| | | export async function uploadFile(params) { |
| | | const formData = new FormData(); |
| | | formData.append('file', params); |
| | | return request(`/backend/file/upload`, { |
| | | method: 'POST', |
| | | data: formData, |
| | | }); |
| | | } |
New file |
| | |
| | | // import { getToken } from '@/utils/authority'; |
| | | import pathRegexp from 'path-to-regexp'; |
| | | import { parse } from 'querystring'; |
| | | import { uploadFile } from './service' |
| | | /* eslint no-useless-escape:0 import/prefer-default-export:0 */ |
| | | const reg = |
| | | /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/; |
| | | export const isUrl = (path) => reg.test(path); |
| | | export const isAntDesignPro = () => { |
| | | if (ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site') { |
| | | return true; |
| | | } |
| | | |
| | | return window.location.hostname === 'preview.pro.ant.design'; |
| | | }; // 给官方演示站点用,用于关闭真实开发环境不需要使用的特性 |
| | | export const customRequest = (params, type) => { |
| | | const { file, onSuccess, onError } = params; |
| | | uploadFile(file) |
| | | .then((ret) => { |
| | | if (type == 1) { |
| | | onSuccess({ name: file.name, url: ret.data }); |
| | | } else { |
| | | onSuccess(ret.data); |
| | | } |
| | | }) |
| | | .catch((ret) => { |
| | | onError(); |
| | | }); |
| | | }; |
| | | export const isAntDesignProOrDev = () => { |
| | | const { NODE_ENV } = process.env; |
| | | |
| | | if (NODE_ENV === 'development') { |
| | | return true; |
| | | } |
| | | |
| | | return isAntDesignPro(); |
| | | }; |
| | | export const getPageQuery = () => parse(window.location.href.split('?')[1]); |
| | | /** |
| | | * props.route.routes |
| | | * @param router [{}] |
| | | * @param pathname string |
| | | */ |
| | | |
| | | /** |
| | | * 导出 |
| | | * @param {*} params |
| | | * @param {*} name |
| | | * @param {*} url |
| | | * @returns |
| | | */ |
| | | |
| | | export const exportExcell = (name, params, url) => { |
| | | fetch(BASE_URL + url, { |
| | | method: 'POST', |
| | | body: JSON.stringify({ |
| | | ...params, |
| | | }), |
| | | headers: { |
| | | Authorization: localStorage.getItem('token'), |
| | | 'ConTent-Type': 'application/json;charset=UTF-8', |
| | | timestamp: new Date().getTime(), |
| | | client: localStorage.getItem('client') |
| | | }, |
| | | responseType: 'blob', |
| | | }) |
| | | .then((res) => res.blob()) |
| | | .then((res) => { |
| | | |
| | | const link = document.createElement('a'); |
| | | link.style.display = 'none'; |
| | | link.href = URL.createObjectURL(res); |
| | | link.download = name; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | // 释放的 URL 对象以及移除 a 标签 |
| | | URL.revokeObjectURL(link.href); |
| | | document.body.removeChild(link); |
| | | }); |
| | | }; |
| | | |
| | | //下载导入末班 |
| | | export const downLoad = (url, name) => { |
| | | fetch(BASE_URL + url, { |
| | | method: 'get', |
| | | responseType: 'blob', |
| | | headers: { |
| | | Authorization: localStorage.getItem('token'), |
| | | 'ConTent-Type': 'application/json;charset=UTF-8', |
| | | timestamp: new Date().getTime(), |
| | | client: localStorage.getItem('client') |
| | | }, |
| | | }) |
| | | .then((res) => res.blob()) |
| | | .then((res) => { |
| | | const link = document.createElement('a'); |
| | | link.style.display = 'none'; |
| | | link.href = URL.createObjectURL(res); |
| | | link.download = name; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | // 释放的 URL 对象以及移除 a 标签 |
| | | URL.revokeObjectURL(link.href); |
| | | document.body.removeChild(link); |
| | | }); |
| | | }; |
| | | export const downloadFile = (url, fileName) => { |
| | | fetch(url) |
| | | .then(response => response.blob()) |
| | | .then(blob => { |
| | | const url = window.URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.setAttribute('download', fileName); |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | window.URL.revokeObjectURL(url); |
| | | document.body.removeChild(link); |
| | | }) |
| | | .catch(error => console.error('Error downloading file:', error)); |
| | | } |
| | | export const getAuthorityFromRouter = (router = [], pathname) => { |
| | | const authority = router.find( |
| | | ({ routes, path = '/' }) => |
| | | (path && pathRegexp(path).exec(pathname)) || |
| | | (routes && getAuthorityFromRouter(routes, pathname)), |
| | | ); |
| | | if (authority) return authority; |
| | | return undefined; |
| | | }; |
| | | export const getRouteAuthority = (path, routeData) => { |
| | | let authorities; |
| | | routeData.forEach((route) => { |
| | | // match prefix |
| | | if (pathRegexp(`${route.path}/(.*)`).test(`${path}/`)) { |
| | | if (route.authority) { |
| | | authorities = route.authority; |
| | | } // exact match |
| | | |
| | | if (route.path === path) { |
| | | authorities = route.authority || authorities; |
| | | } // get children authority recursively |
| | | |
| | | if (route.routes) { |
| | | authorities = getRouteAuthority(path, route.routes) || authorities; |
| | | } |
| | | } |
| | | }); |
| | | return authorities; |
| | | }; |
New file |
| | |
| | | // mixins for clearfix |
| | | // ------------------------ |
| | | .clearfix() { |
| | | zoom: 1; |
| | | &::before, |
| | | &::after { |
| | | display: table; |
| | | content: ' '; |
| | | } |
| | | &::after { |
| | | clear: both; |
| | | height: 0; |
| | | font-size: 0; |
| | | visibility: hidden; |
| | | } |
| | | } |
New file |
| | |
| | | import { isUrl, getRouteAuthority } from './utils'; |
| | | |
| | | describe('isUrl tests', () => { |
| | | it('should return false for invalid and corner case inputs', () => { |
| | | expect(isUrl([])).toBeFalsy(); |
| | | expect(isUrl({})).toBeFalsy(); |
| | | expect(isUrl(false)).toBeFalsy(); |
| | | expect(isUrl(true)).toBeFalsy(); |
| | | expect(isUrl(NaN)).toBeFalsy(); |
| | | expect(isUrl(null)).toBeFalsy(); |
| | | expect(isUrl(undefined)).toBeFalsy(); |
| | | expect(isUrl('')).toBeFalsy(); |
| | | }); |
| | | it('should return false for invalid URLs', () => { |
| | | expect(isUrl('foo')).toBeFalsy(); |
| | | expect(isUrl('bar')).toBeFalsy(); |
| | | expect(isUrl('bar/test')).toBeFalsy(); |
| | | expect(isUrl('http:/example.com/')).toBeFalsy(); |
| | | expect(isUrl('ttp://example.com/')).toBeFalsy(); |
| | | }); |
| | | it('should return true for valid URLs', () => { |
| | | expect(isUrl('http://example.com/')).toBeTruthy(); |
| | | expect(isUrl('https://example.com/')).toBeTruthy(); |
| | | expect(isUrl('http://example.com/test/123')).toBeTruthy(); |
| | | expect(isUrl('https://example.com/test/123')).toBeTruthy(); |
| | | expect(isUrl('http://example.com/test/123?foo=bar')).toBeTruthy(); |
| | | expect(isUrl('https://example.com/test/123?foo=bar')).toBeTruthy(); |
| | | expect(isUrl('http://www.example.com/')).toBeTruthy(); |
| | | expect(isUrl('https://www.example.com/')).toBeTruthy(); |
| | | expect(isUrl('http://www.example.com/test/123')).toBeTruthy(); |
| | | expect(isUrl('https://www.example.com/test/123')).toBeTruthy(); |
| | | expect(isUrl('http://www.example.com/test/123?foo=bar')).toBeTruthy(); |
| | | expect(isUrl('https://www.example.com/test/123?foo=bar')).toBeTruthy(); |
| | | }); |
| | | }); |
| | | describe('getRouteAuthority tests', () => { |
| | | it('should return authority for each route', () => { |
| | | const routes = [ |
| | | { |
| | | path: '/user', |
| | | name: 'user', |
| | | authority: ['user'], |
| | | exact: true, |
| | | }, |
| | | { |
| | | path: '/admin', |
| | | name: 'admin', |
| | | authority: ['admin'], |
| | | exact: true, |
| | | }, |
| | | ]; |
| | | expect(getRouteAuthority('/user', routes)).toEqual(['user']); |
| | | expect(getRouteAuthority('/admin', routes)).toEqual(['admin']); |
| | | }); |
| | | it('should return inherited authority for unconfigured route', () => { |
| | | const routes = [ |
| | | { |
| | | path: '/nested', |
| | | authority: ['admin', 'user'], |
| | | exact: true, |
| | | }, |
| | | { |
| | | path: '/nested/user', |
| | | name: 'user', |
| | | exact: true, |
| | | }, |
| | | ]; |
| | | expect(getRouteAuthority('/nested/user', routes)).toEqual(['admin', 'user']); |
| | | }); |
| | | it('should return authority for configured route', () => { |
| | | const routes = [ |
| | | { |
| | | path: '/nested', |
| | | authority: ['admin', 'user'], |
| | | exact: true, |
| | | }, |
| | | { |
| | | path: '/nested/user', |
| | | name: 'user', |
| | | authority: ['user'], |
| | | exact: true, |
| | | }, |
| | | { |
| | | path: '/nested/admin', |
| | | name: 'admin', |
| | | authority: ['admin'], |
| | | exact: true, |
| | | }, |
| | | ]; |
| | | expect(getRouteAuthority('/nested/user', routes)).toEqual(['user']); |
| | | expect(getRouteAuthority('/nested/admin', routes)).toEqual(['admin']); |
| | | }); |
| | | it('should return authority for substring route', () => { |
| | | const routes = [ |
| | | { |
| | | path: '/nested', |
| | | authority: ['user', 'users'], |
| | | exact: true, |
| | | }, |
| | | { |
| | | path: '/nested/users', |
| | | name: 'users', |
| | | authority: ['users'], |
| | | exact: true, |
| | | }, |
| | | { |
| | | path: '/nested/user', |
| | | name: 'user', |
| | | authority: ['user'], |
| | | exact: true, |
| | | }, |
| | | ]; |
| | | expect(getRouteAuthority('/nested/user', routes)).toEqual(['user']); |
| | | expect(getRouteAuthority('/nested/users', routes)).toEqual(['users']); |
| | | }); |
| | | }); |
New file |
| | |
| | | { |
| | | "compilerOptions": { |
| | | "target": "esnext", |
| | | "module": "esnext", |
| | | "moduleResolution": "node", |
| | | "importHelpers": true, |
| | | "jsx": "preserve", |
| | | "esModuleInterop": true, |
| | | "sourceMap": true, |
| | | "baseUrl": "./", |
| | | "skipLibCheck": true, |
| | | "experimentalDecorators": true, |
| | | "strict": true, |
| | | "resolveJsonModule": true, |
| | | "allowSyntheticDefaultImports": true, |
| | | "paths": { |
| | | "@/*": ["./src/*"], |
| | | "@@/*": ["./src/.umi/*"], |
| | | "@@test/*": ["./src/.umi-test/*"] |
| | | } |
| | | }, |
| | | "include": ["./**/*.d.ts", "./**/*.ts", "./**/*.tsx", "src/access.js"] |
| | | } |