Commit 7e94ccdf by 李新

会籍服务

0 parents
Showing 182 changed files with 2590 additions and 0 deletions
> 1%
last 2 versions
not dead
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
VUE_APP_NODE_ENV="development"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
VUE_APP_NODE_ENV="development"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
VUE_APP_NODE_ENV="production"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
VUE_APP_NODE_ENV="test"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
module.exports = {
root: true,
env: {
node: true
},
extends: [
'plugin:vue/essential',
'@vue/standard'
],
parserOptions: {
parser: 'babel-eslint'
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'arrow-parens': 0, // allow paren-less arrow functions
'generator-star-spacing': 0, // allow async-await
"no-unused-vars": [1, {
"vars": "local", //允许声明未使用变量
"args": "none" //参数不检查
}],
"semi": [0], //关闭语句强制分号结尾
"no-multiple-empty-lines": [0, { "max": 100 }], //空行最多不能超过100行
"no-mixed-spaces-and-tabs": [0], //关闭禁止混用tab和空格
"comma-dangle": [2, 'never'], //解决最后一行 有一个逗号问题
}
}
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# polysoft-h5
## 安装依赖
```
yarn install
```
### 本地启动
```
开发环境
yarn dev or npm dev
测试环境
yarn test or npm run test
正式或者生产环境
yarn pro or npm run pro
```
### 打包编译
```
开发环境
yarn build:dev
测试环境
yarn build:test
正式或者生产环境
yarn build:pro
```
### Lints and fixes files
```
yarn lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
plugins: [
['import', {
libraryName: 'vant',
libraryDirectory: 'es',
style: true
}, 'vant']
]
}
This diff could not be displayed because it is too large.
{
"name": "polysoft-h5",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "vue-cli-service serve",
"test": "vue-cli-service serve --mode test",
"pro": "vue-cli-service serve --mode pro",
"build:dev": "vue-cli-service build --mode dev",
"build:test": "vue-cli-service build --mode test",
"build:pro": "vue-cli-service build --mode pro",
"lint": "vue-cli-service lint"
},
"dependencies": {
"autoprefixer": "^9.7.6",
"axios": "^0.21.1",
"better-scroll": "^1.15.2",
"core-js": "^3.6.5",
"cropperjs": "^1.5.11",
"js-cookie": "^2.2.1",
"lib-flexible": "^0.3.2",
"vant": "2.12.6",
"vconsole": "^3.4.1",
"vue": "^2.6.11",
"vue-i18n": "^8.24.3",
"vue-pdf": "^4.2.0",
"vue-router": "^3.2.0",
"vuex": "^3.4.0",
"vuex-persist": "^3.1.3"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/eslint-config-standard": "^5.1.2",
"babel-eslint": "^10.1.0",
"babel-plugin-import": "^1.13.3",
"compression-webpack-plugin": "^3.1.0",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
"less": "^3.0.4",
"less-loader": "^5.0.0",
"postcss-pxtorem": "^5.1.1",
"vue-template-compiler": "^2.6.11",
"webpack-spritesmith": "^1.1.0"
}
}
const autoprefixer = require('autoprefixer')
const pxtorem = require('postcss-pxtorem')
module.exports = ({ file }) => {
let rootValue
// console.log(file.dirname)
// vant 37.5 [link](https://github.com/youzan/vant/issues/1181)
// if (file && file.dirname && file.dirname.indexOf('vant') > -1 && file.dirname.indexOf('swiper') > -1) {
if (file && file.dirname && file.dirname.indexOf('vant') > -1) {
rootValue = 37.5
} else {
rootValue = 41.4 //75
}
return {
plugins: [
autoprefixer(),
pxtorem({
rootValue: rootValue,
propList: ['*'],
selectorBlackList: ['.swiper'], // 要忽略的选择器并保留为px。
minPixelValue: 0
})
]
}
}
\ No newline at end of file \ No newline at end of file
No preview for this file type
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,index-scalable=no,user-scalable=0,viewport-fit=cover" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<link rel="stylesheet" href="http://at.alicdn.com/t/font_1209422_r18qamg15s.css">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
No preview for this file type
No preview for this file type
No preview for this file type
<template>
<div id="app">
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
</div>
</template>
<script>
import Touch from '@/components/Touch'
export default {
mounted() {
new Touch('#app', { filter: [] })
}
}
</script>
export const NativeMethodNames = {
AppInfoApi: 'nativeAppInfo',
AppShare: 'nativeAppShare',
AppBottomMenu: 'nativeMenu',
nativeTextZoom: 'nativeTextZoom',
}
export const JsMethodNames = {
PayResult: 'payResult'
}
export const JsInterfaces = objVal2Array(JsMethodNames)
export const NativeMenuApi = {
nativeMenuShow: (param = {}) => {
const newParam = { ...param, type: '1' }
NativeApi.nativeMenuStatus(newParam).then(res => { }).catch(e => { })
},
nativeMenuHide: (param = {}) => {
const newParam = { ...param, type: '2' }
NativeApi.nativeMenuStatus(newParam).then(res => { }).catch(e => { })
}
}
export const NativeApi = {
on: (jsMethodName, callback) => {
$api.on(jsMethodName, callback)
},
call: (nativeMethodName, param, isBack) => {
return $api.call(nativeMethodName, param, isBack)
},
nativeAppInfo: (param) => {
return $api.call(NativeMethodNames.AppInfoApi, param, true)
},
nativeAppShare: (param) => {
return $api.call(NativeMethodNames.AppShare, param, true)
},
// {type: '1'-显示/'2'-隐藏, moduleName: '切换模块名称', routeName: '路由名称', routePath: '路由地址', url:'完整url'}
nativeMenuStatus: (param) => {
if (!param.type) {
Object.assign(param, { type: '1' })
}
return $api.call(NativeMethodNames.AppBottomMenu, param, false)
},
// {value: 100}
nativeTextZoom: (param) => {
if (!param.value) {
Object.assign(param, { value: 100 })
}
return $api.call(NativeMethodNames.nativeTextZoom, param, false)
}
}
function objVal2Array (obj) {
const arrays = []
for (const key in obj) {
arrays.push(obj[key])
}
return arrays
}
\ No newline at end of file \ No newline at end of file
* {
padding: 0;
margin: 0;
box-sizing: border-box;
touch-action: auto;
-webkit-overflow-scrolling: touch;
font-family: "苹方黑体-准-简", "PingFangSC-Regular", "PingFang SC", "Microsoft YaHei", "微软雅黑", "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Source Han Sans", "Noto Sans CJK Sc", "Microsoft Jhenghei", sans-serif;
}
html,
body {
height: 100vh;
width: 100vw;
margin: 0;
padding: 0;
}
@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
.iPhone .NavBar {
padding-top: calc(env(safe-area-inset-top) / 1.5);
}
.iPhone .NavBarWrap {
margin-bottom: calc(env(safe-area-inset-top) / 1.5);
}
.iPhone .payment_nav {
padding-top: calc(env(safe-area-inset-top) / 1.5);
}
.iPhone .payment_navbar_wrap {
padding-top: calc(env(safe-area-inset-top) / 1.5);
}
.iPhone .home {
padding-bottom: env(safe-area-inset-top);
}
.iPhone .navigation {
padding-top: calc(env(safe-area-inset-top) / 1.5) !important;
}
.iPhone .addAddress,
.iPhone .shop_item {
padding-top: calc(env(safe-area-inset-top) / 1.5);
}
.iPhone .product_footer {
padding-bottom: calc(env(safe-area-inset-bottom) / 1.5) !important;
padding-top: 15px !important;
}
.iPhone .header {
padding-top: calc(env(safe-area-inset-top) / 1.5) !important;
}
}
::-webkit-scrollbar {
display: none;
/* background-color:transparent; */
}
.pay {
height: 100vh;
width: 100vw;
}
#app {
height: 100vh;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: normal;
}
html {
-webkit-tap-highlight-color: transparent;
}
.icon {
width: 1.2em;
height: 1.2em;
fill: currentColor;
overflow: hidden;
}
.van-tabs__wrap--scrollable .van-tab {
flex: 1;
}
.van-tabs__line {
background-color: #729ae0;
bottom: 10px;
}
.van-button--default {
background-color: #292F42;
color: #fff;
}
.van-tab--active {
color: #729ae0;
}
.titlePaddingTop {
padding-top: 88px;
}
.left-enter,
.left-leave-to {
transform: translate3d(-100%, 0, 0);
}
.left-leave,
.left-enter-to {
transform: translate3d(0, 0, 0);
}
.left-enter-active,
.left-leave-active {
transition: all 0.2s;
}
.van-dialog__cancel {
background: #fff;
color: #545454;
}
.van-dialog__confirm {
background: #fff;
color: #5594E5;
}
.van-tabs__nav--line {
padding-bottom: 5px;
box-sizing: border-box;
}
.clearfix {
*zoom: 1;
}
.clearfix:before,
.clearfix:after {
display: block;
content: "";
line-height: 0;
}
.clearfix:after {
clear: both;
}
.van-list__finished-text {
position: relative;
}
.van-list__finished-text::before {
content: "";
background-color: #999;
height: 4px;
transform: scale(1, 0.3);
width: 100px;
position: absolute;
top: 50%;
margin-top: -3px;
left: 120px;
}
.van-list__finished-text::after {
content: "";
background-color: #999;
height: 4px;
transform: scale(1, 0.3);
width: 100px;
position: absolute;
top: 50%;
margin-top: -3px;
right: 120px;
}
.noList .van-list__finished-text {
visibility: hidden !important;
}
.van-image-preview__index {
top: 93%;
}
.van-list__finished-text::before {
left: 2.1rem;
}
.van-list__finished-text::after {
right: 2.1rem;
}
input {
border: none;
}
.nafmii-head-bg1 {
background: url("~@/assets/icon/bg_login.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
.nafmii-head-bg2 {
background: url("~@/assets/icon/bg_mine.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
.nafmii-head-bg3 {
background: url("~@/assets/icon/bg_common.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
@import "variable";
* {
padding: 0;
margin: 0;
box-sizing: border-box;
touch-action: auto;
-webkit-overflow-scrolling: touch;
font-family: "苹方黑体-准-简", "PingFangSC-Regular", "PingFang SC", "Microsoft YaHei", "微软雅黑", "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Source Han Sans", "Noto Sans CJK Sc", "Microsoft Jhenghei", sans-serif;
}
html,
body {
height: 100vh;
width: 100vw;
margin: 0;
padding: 0;
}
img {
width: 100%;
}
@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
.iPhone {
//头部
.NavBar {
padding-top: calc(env(safe-area-inset-top) / 1.5)
}
.NavBarWrap {
margin-bottom: calc(env(safe-area-inset-top) / 1.5)
}
.payment_nav {
padding-top: calc(env(safe-area-inset-top) / 1.5)
}
.payment_navbar_wrap {
padding-top: calc(env(safe-area-inset-top) / 1.5)
}
.home {
padding-bottom: env(safe-area-inset-top)
}
.navigation {
padding-top: calc(env(safe-area-inset-top) / 1.5) !important
}
.addAddress,
.shop_item {
padding-top: calc(env(safe-area-inset-top) / 1.5)
}
.product_footer {
//bottom:calc(env(safe-area-inset-bottom) + 10px) !important;
padding-bottom: calc(env(safe-area-inset-bottom) / 1.5) !important;
padding-top: 15px !important;
}
.header {
padding-top: calc(env(safe-area-inset-top) / 1.5) !important
}
}
}
::-webkit-scrollbar {
// 直接复制黏贴到样式页.css,完美解决
display: none;
/* background-color:transparent; */
}
#app {
height: 100vh;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: normal;
}
html {
-webkit-tap-highlight-color: transparent;
}
//iconfont start
.icon {
width: 1.2em;
height: 1.2em;
fill: currentColor;
overflow: hidden;
}
//iconfont end
//vant 相关
.van-tabs__wrap--scrollable .van-tab {
flex: 1
}
.van-tabs__line {
background-color: @theme;
bottom: 10px;
}
.van-button--default {
background-color: @headerBg;
color: #fff;
}
.van-tab--active {
color: @theme;
}
//vant 相关 end
.titlePaddingTop {
padding-top: 88px;
}
.left-enter,
.left-leave-to {
transform: translate3d(-100%, 0, 0)
}
.left-leave,
.left-enter-to {
transform: translate3d(0, 0, 0)
}
.left-enter-active,
.left-leave-active {
transition: all .2s
}
// vant Dialog 按钮背景色 和 字体颜色
.van-dialog__cancel {
background: #fff;
color: #545454;
}
.van-dialog__confirm {
background: #fff;
color: #5594E5;
}
//vant nav
.van-tabs__nav--line {
padding-bottom: 5px;
box-sizing: border-box;
}
// 清除浮动
.clearfix {
*zoom: 1;
&:before,
&:after {
display: block;
content: "";
line-height: 0;
}
&:after {
clear: both;
}
}
.noList {
.van-list__finished-text {
visibility: hidden !important;
}
}
// 预览大图页签
.van-image-preview__index {
top: 93%;
}
input {
border: none;
}
.nafmii-head-bg1 {
background: url("~@/assets/icon/bg_login.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
.nafmii-head-bg1-2 {
background: url("~@/assets/icon/bg_login_2.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
.nafmii-head-bg2 {
background: url("~@/assets/icon/bg_mine.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
.nafmii-head-bg3 {
background: url("~@/assets/icon/bg_common.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
.nafmii-head-bg4 {
background: url("~@/assets/icon/bg_member.png") no-repeat !important;
background-size: 100% !important;
background-position: center center;
}
\ No newline at end of file \ No newline at end of file
@import 'mixins.less';
@import 'common.less';
\ No newline at end of file \ No newline at end of file
.round-borders (@radius) {
border-radius : @radius;
-moz-border-radius : @radius;
-webkit-border-radius: @radius;
}
.justify-align-center() {
display : flex;
justify-content: center;
align-items : center;
}
.justify-align-between(){
display : flex;
align-items : center;
justify-content: space-between;
}
.justify-between{
display : flex;
justify-content: space-between;
}
.justify-center() {
display : flex;
justify-content: center;
}
.align-center() {
display : flex;
align-items: center;
}
.ellipsis() {
overflow : hidden;
text-overflow: ellipsis;
white-space : nowrap;
}
// 字重
.fw550 {
font-weight: 550;
}
// flex 水平、垂直都居中,默认主轴方向为水平方向
.flex-center(@direction: row) when (@direction =row),
(@direction =h) {
.justify-align-center();
flex-direction: row;
}
// flex 水平、垂直都居中
.flex-center(@direction: row) when(@direction =column),
(@direction =v) {
.justify-align-center();
flex-direction: column;
}
// flex水平居中主轴为水平方向
.flex-center-h(@direction: row) when (@direction =row),
(@direction =h) {
.justify-center();
flex-direction: row;
}
// flex水平居中主轴为垂直方向
.flex-center-h(@direction: row) when (@direction =column),
(@direction =v) {
.align-center();
flex-direction: column;
}
// flex垂直居中主轴为水平方向
.flex-center-v(@direction: row) when (@direction =row),
(@direction =h) {
.align-center();
flex-direction: row;
}
// flex垂直居中主轴为垂直方向
.flex-center-v(@direction: row) when (@direction =column),
(@direction =v) {
.justify-center();
flex-direction: column;
}
// 固定显示多上行,size:固定显示的行数
.line-clamp(@size) {
overflow : hidden;
text-overflow : ellipsis;
line-clamp : @size;
-webkit-line-clamp: @size;
display : -webkit-box;
-webkit-box-orient: vertical;
}
// 旋转角度
.transform-rotate(@deg) {
transform : rotate(@deg);
-ms-transform : rotate(@deg);
-moz-transform : rotate(@deg);
-webkit-transform: rotate(@deg);
-o-transform : rotate(@deg);
}
\ No newline at end of file \ No newline at end of file
form {
width: 100%;
}
.common_search {
/deep/ &&.van-search {
padding: 0;
margin: 10px 0;
background: inherit;
background-color: rgba(255, 255, 255, 0.2);
color: #fff;
border-radius: 16px;
height: 33px;
}
/deep/ .van-search__content {
background-color: rgba(255, 255, 255, 0.2);
border-radius: 16px;
color: #fff;
height: 33px;
}
/deep/ .van-field__left-icon .van-icon,
.van-field__right-icon .van-icon {
color: #fff;
}
/deep/ input::-webkit-input-placeholder {
color: #fff;
opacity: 0.8;
font-size: 12px;
}
/deep/ .van-field__control {
color: #fff;
font-size: 12px;
}
}
\ No newline at end of file \ No newline at end of file
.icon-sprite { display: inline-block; background-image: url(../images/sprite.png); background-size: 2060px 1529px; }
.icon-bg-common { width: 828px; height: 360px; background-position: 0px -1169px; }
.icon-bg-login-2 { width: 828px; height: 506px; background-position: -1232px 0px; }
.icon-bg-login { width: 828px; height: 412px; background-position: 0px -737px; }
.icon-bg-member-result { width: 1212px; height: 717px; background-position: 0px 0px; }
.icon-bg-member { width: 828px; height: 406px; background-position: -848px -737px; }
.icon-bg-mine { width: 828px; height: 340px; background-position: -848px -1169px; }
.icon-center-about { width: 36px; height: 36px; background-position: -1297px -670px; }
.icon-center-collect { width: 36px; height: 36px; background-position: -1353px -670px; }
.icon-center-feedback { width: 36px; height: 36px; background-position: -1409px -670px; }
.icon-center-message { width: 36px; height: 36px; background-position: -1465px -670px; }
.icon-center-question { width: 36px; height: 36px; background-position: -1521px -670px; }
.icon-center-setting { width: 36px; height: 36px; background-position: -1577px -670px; }
.icon-center-study { width: 36px; height: 36px; background-position: -1633px -670px; }
.icon-change-member { width: 90px; height: 90px; background-position: -1514px -526px; }
.icon-email { width: 36px; height: 36px; background-position: -1689px -670px; }
.icon-empty { width: 36px; height: 36px; background-position: -1745px -670px; }
.icon-filter { width: 44px; height: 50px; background-position: -1910px -981px; }
.icon-icon-arrow-right { width: 10px; height: 18px; background-position: -2050px -737px; }
.icon-icon-classify { width: 30px; height: 30px; background-position: -2030px -981px; }
.icon-icon-clock { width: 30px; height: 30px; background-position: -1874px -1055px; }
.icon-join-member { width: 90px; height: 90px; background-position: -1624px -526px; }
.icon-logo-2 { width: 118px; height: 112px; background-position: -1376px -526px; }
.icon-logo { width: 224px; height: 224px; background-position: -1696px -737px; }
.icon-message { width: 50px; height: 50px; background-position: -1770px -981px; }
.icon-more { width: 10px; height: 18px; background-position: -2050px -775px; }
.icon-password { width: 36px; height: 36px; background-position: -1801px -670px; }
.icon-pdf { width: 46px; height: 60px; background-position: -1696px -1055px; }
.icon-photo-default { width: 124px; height: 124px; background-position: -1232px -526px; }
.icon-question-icon { width: 36px; height: 36px; background-position: -1857px -670px; }
.icon-quit-member { width: 90px; height: 90px; background-position: -1734px -526px; }
.icon-shtyxydm { width: 54px; height: 54px; background-position: -1696px -981px; }
.icon-tel { width: 36px; height: 36px; background-position: -1913px -670px; }
.icon-time-update { width: 45px; height: 45px; background-position: -1232px -670px; }
.icon-trash { width: 50px; height: 50px; background-position: -1840px -981px; }
.icon-user-question { width: 32px; height: 36px; background-position: -2025px -670px; }
.icon-user { width: 36px; height: 36px; background-position: -1969px -670px; }
.icon-verification { width: 36px; height: 36px; background-position: -1974px -981px; }
.icon-wechat { width: 80px; height: 78px; background-position: -1940px -847px; }
.icon-progress-act { width: 36px; height: 36px; background-position: -1762px -1055px; }
.icon-progress-normal { width: 36px; height: 36px; background-position: -1818px -1055px; }
.icon-change-name { width: 90px; height: 90px; background-position: -1844px -526px; }
.icon-change-representive { width: 90px; height: 90px; background-position: -1954px -526px; }
.icon-change-membership { width: 90px; height: 90px; background-position: -1940px -737px; }
\ No newline at end of file \ No newline at end of file
// 字体 全局变量
@font47 : 47px;
@font30 : 30px;
@font27 : 27px;
@font24 : 24px;
@font22 : 22px;
@font20 : 20px;
@font18 : 18px;
@font16 : 16px;
@font14 : 14px;
@font12 : 12px;
@font10 : 10px;
// radius-size
@radius-size-medium : 5px;
@radius-size-medium10 : 10px;
@radius-size-medium20 : 20px;
@radius-size-medium30 : 30px;
@warn:red;
//页面背景颜色
@bgColor:#f8f8f8;
@headerBg:#292F42;
//当前主题颜色
@theme:#729ae0;
// 页面颜色
@color000: #000;
@colorfff: #fff;
@color333: #333;
No preview for this file type
<template>
<section class="data-list-item" @click="$emit('click')">
<div class="item-title">
<div class="title-tag">
<slot name="tag"></slot>
</div>
<span class="title-content" v-indent="10">{{data.title}}</span>
</div>
<div class="item-bottom">
<div class="bottom-content">
<slot v-bind:value="data" name="bottomLeft" />
<template v-if="!$slots.bottomLeft">
<img class="bottom-icon" src="@/assets/icon/icon_clock.png">
<span class="bottom-text">{{dateText}}{{data.date}}</span>
</template>
</div>
<div class="bottom-content">
<slot v-bind:value="data" name="bottomRight" />
<template v-if="!$slots.bottomRight">
<img class="bottom-icon" src="@/assets/icon/icon_classify.png">
<span>{{data.dataType}}</span>
</template>
</div>
</div>
</section>
</template>
<script>
export default {
name: 'DataListItem',
props: {
data: {
type: Object,
default: () => { return {} }
},
dateText: {
type: String
},
tag: {
type: String
}
},
data () {
return {}
},
methods: {
},
directives: {
indent: {
inserted (el, binding) {
setTimeout(() => {
const nodes = el.previousElementSibling.childNodes
const data = { width: 0 }
for (const node of nodes) {
data.width = data.width + node.offsetWidth
}
if (!data.width) return
const indentSize = data.width + (binding.value || 0)
console.log(indentSize);
el.style.textIndent = `${indentSize}px`
}, 0);
}
}
}
}
</script>
<style lang="less" scoped>
@import '~@/assets/css/mixins.less';
@PaddingSize: 11px;
.data-list-item {
padding: @PaddingSize 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
.item-title {
display: flex;
flex-wrap: wrap;
align-items: center;
position: relative;
.title-tag {
position: absolute;
left: 0;
top: 0;
display: flex;
align-items: center;
height: 25px;
}
.title-content {
font-size: 16px;
color: #222222;
line-height: 25px;
.line-clamp(2);
}
}
.item-bottom {
padding-top: 10px;
display: flex;
justify-content: space-between;
.bottom-content {
display: flex;
align-items: center;
color: #999999;
line-height: 16px;
font-size: 12px;
@IconSize: 15px;
.bottom-icon {
width: @IconSize;
height: @IconSize;
margin-right: 7px;
}
}
}
}
</style>
\ No newline at end of file \ No newline at end of file
<template>
<div class="footer_bottom_container">
已经到底了
</div>
</template>
<script>
export default {
name: 'FooterBottom'
}
</script>
<style lang="less" scoped>
.footer_bottom_container {
display: flex;
align-items: center;
justify-content: center;
color: #999;
font-size: 20px;
height: 100px;
}
</style>
\ No newline at end of file \ No newline at end of file
<template>
<section v-wrap:height="'v'">
<div class="nav_bar" :class="navClass" :style="navObj.barStyle">
<div class="nav_top_container" v-if="$slots.top">
<slot name="top" />
</div>
<div class="nav_content_container">
<!-- 左侧 自定义 -->
<div class="nav_left" v-if="$slots.left" slot="left">
<slot name="left" />
</div>
<!-- 左侧 默认 箭头以及文字描述 -->
<div class="nav_left" v-else @click="handleBack">
<i v-if="navObj.barLeftArrow" class="iconfont iconpreviewleft"></i>
{{navObj.barLeftText}}
</div>
<!-- 标题栏 默认 自定义 -->
<div v-if="$slots.default" v-wrap:height="'v'">
<div class="nav_title" v-wrap:height="'v'">
<slot />
</div>
</div>
<!-- 标题栏 -->
<div class="nav_title" v-else>{{navObj.barTitle}}</div>
<!-- 右侧插槽 -->
<div class="nav_right" v-if="$slots.right" slot="right">
<slot name="right" />
</div>
</div>
<div class="nav_bottom_container" v-if="$slots.bottom">
<slot name="bottom" />
</div>
</div>
</section>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'NafmHeader',
props: {
bgColor: {
type: String,
},
isBgImg: {
type: Boolean,
default: true
},
navClass: {
type: String,
},
color: {
type: String
},
leftText: {
type: String
},
leftArrow: {
type: Boolean,
default: undefined
},
title: {
type: String
},
showBack: {
type: Boolean,
default: false
},
},
computed: {
...mapGetters('common', ['GStatusBarHeight']),
navObj () {
const meta = this.$route.meta
let leftArrowStatus = true
if (this.leftArrow != undefined) {
leftArrowStatus = this.leftArrow
} else if (meta.leftArrow != undefined) {
leftArrowStatus = meta.leftArrow
}
// 如果设置了背景图片 则不用设置 背景颜色了
// console.log('this.isBgImg',this.isBgImg)
const barStyleBg = this.isBgImg ? {} : { background: this.bgColor || meta.bgColor || '#729ae0' }
// console.log('meta',meta)
return {
barStyle: {
...barStyleBg,
color: this.color || meta.color || '#fff',
paddingTop: `${this.GStatusBarHeight}px`
},
barLeftText: this.leftText || meta.leftText || '',
barTitle: this.title || meta.title || '',
barLeftArrow: leftArrowStatus
}
},
},
methods: {
handleBack () {
if (this.showBack) {
this.$emit('onBack')
} else {
this.$router.back()
}
}
},
directives: {
wrap: {
inserted: function (el, binding, vnode, oldVnode) {
// setTimeout(() => {
const { arg, value } = binding
const style = { width: 0, height: 0 }
for (let i = 0; i < el.childNodes.length; i++) {
const element = el.childNodes[i];
if (arg == 'height') {
if (value == 'h') {
style.height = Math.max(style.height, element.offsetHeight)
} else if (value == 'v') {
style.height = style.height + element.offsetHeight
}
} else if (arg == 'width') {
if (value == 'h') {
style.width = Math.max(style.height, element.offsetWidth)
} else if (value == 'v') {
style.width = style.height + element.offsetWidth
}
}
}
style.width && (el.style.width = `${style.width}px`)
style.height && (el.style.height = `${style.height}px`)
// }, 0);
}
}
}
}
</script>
<style lang="less" scoped>
@NavHeight: 45px;
@PaddingSize: 15px;
section {
width: 100%;
position: relative;
z-index: 10;
.nav_bar {
position: fixed;
left: 0;
top: 0;
width: 100%;
padding: 0 @PaddingSize;
box-sizing: border-box;
.nav_content_container {
min-height: @NavHeight;
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
}
}
.nav_left {
display: flex;
align-items: center;
z-index: 2;
:active {
opacity: 0.5;
}
.iconpreviewleft {
font-size: 25px;
}
img {
width: 51px;
height: 51px;
}
}
.nav_title {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
min-height: @NavHeight;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
}
.nav_right {
min-width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
z-index: 2;
}
}
</style>
\ No newline at end of file \ No newline at end of file
<template>
<van-popup :value="value" @input="val=>this.$emit('input',val)" position="right" :style="{ height: '100%',width: '85%' }">
<div class="filter_container">
<div :style="{paddingTop: GStatusBarHeight+'px',height: '85vh',overflowY:'scroll'}">
<slot />
</div>
<div class="button">
<div class="btn reset" @click="handleReset">重置</div>
<div class="btn sure" @click="handleSure">确定</div>
</div>
</div>
</van-popup>
</template>
<script>
import { mapGetters } from 'vuex';
export default {
name: 'Popup',
props: {
value: Boolean,
},
computed: {
...mapGetters('common', ['GStatusBarHeight']),
},
methods: {
handleReset() {
this.$emit('reset')
},
handleSure() {
this.$emit('sure')
}
}
}
</script>
<style lang="less" scoped>
.filter_container {
display: flex;
flex-direction: column;
padding: 50px 15px;
height: 100%;
}
.button {
display: flex;
align-items: flex-end;
flex: 1;
justify-content: space-between;
.btn {
width: 43%;
display: flex;
justify-content: center;
align-items: center;
height: 45px;
font-size: 15px;
border-radius: 5px;
}
.reset {
background-color: #f6f6f6;
color: #666;
}
.sure {
background-image: linear-gradient(to right, #25a3df, #106abc);
color: #fff;
}
}
</style>
\ No newline at end of file \ No newline at end of file
<template>
<div class="history">
<div class="history_title" v-if="historys.length">
<span>搜索历史</span>
<img :src="require('@/assets/icon/trash.png')" @click="handleClear">
</div>
<div class="historyList" v-if="historys.length">
<ul>
<li v-for="(item,index) in historys" :key="index" @click="jumItem(item)">{{item}}</li>
</ul>
</div>
<div class="noData" v-else>
暂无历史记录
</div>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'SearchHistory',
props: {
stateKey: String,
},
computed: {
...mapState('search', {
historys (state) {
return state[this.stateKey] || []
}
}),
},
methods: {
jumItem (val) {
this.$emit('jumpPage', val)
},
handleClear () {
this.$store.dispatch('search/ACleanHistory', this.stateKey)
this.$emit('clear')
}
}
}
</script>
<style lang="less" scoped>
.history {
display: flex;
flex-direction: column;
padding: 20px 15px;
background-color: #fafafa;
height: 100%;
.history_title {
display: flex;
justify-content: space-between;
span {
color: #666;
font-size: 11px;
}
img {
width: 25px;
height: 25px;
}
}
}
.historyList {
ul {
display: flex;
flex-wrap: wrap;
li {
display: flex;
justify-content: center;
padding: 7px 15px;
background-color: #fff;
border-radius: 15px;
margin-right: 10px;
margin-top: 10px;
min-width: 80px;
font-size: 12px;
color: #161818;
word-break: break-all;
}
}
}
.noData {
text-align: center;
color: #666;
}
</style>
\ No newline at end of file \ No newline at end of file
<template>
<form action="javascript:return true">
<van-search class="common_search" v-model.trim="searchValue" v-on="$listeners" v-bind="$attrs" />
</form>
</template>
<script>
export default {
name: 'SearchInput',
props: {
keyword: String
},
model: {
prop: ['keyword']
},
data () {
return {
searchValue: ''
}
},
watch: {
searchValue (val) {
this.$emit('input', val)
},
keyword (val) {
this.searchValue = val
}
}
}
</script>
<style lang="less" scoped>
@import '~@/assets/css/search.less';
</style>
\ No newline at end of file \ No newline at end of file
<template>
<div>
<div class="sendCodeText" :class="{active:isValue}" @click="sendCode" v-show="show">获取验证码</div>
<div class="coutdDownText" v-show="!show"><span class="second">{{time}}s</span>后重新获取</div>
</div>
</template>
<script>
import utils from "@/utils/";
let timer = null;
export default {
name: 'SendVerificationCode',
props: {
coutDownNumber: {
type: Number,
default: 60
},
phone: {
type: [Number, String],
},
email: {
type: String
},
data: {
type: Object
}
},
data() {
return {
show: true,
time: 60,
isValue: false
}
},
watch: {
// 监控 手机号有值 则获取验证码 增加蓝色
phone(val) {
if (val) {
this.isValue = true
} else {
this.isValue = false
}
},
// 监控 邮箱号有值 则获取验证码 增加蓝色
email(val) {
if (val) {
this.isValue = true
} else {
this.isValue = false
}
},
},
methods: {
sendCode() {
console.log(this.data.type)
// 发送手机号验证码
if (this.data.type == 'phone') {
// 判断手机号不能为空
if (!this.phone) {
Toast('请输入手机号')
return
}
if (!utils.phoneRegCheck(this.phone)) {
Toast("请输入正确的手机号码!");
return
}
} else {
// 发送邮件验证码
if (!this.email) {
Toast('请输入邮箱')
return
}
if (!utils.emailRegCheck(this.email)) {
Toast("请输入正确的邮箱格式!");
return
}
}
this.time = this.coutDownNumber
this.show = false // 显示倒计时
if (timer) {
clearInterval(timer);
}
timer = setInterval(() => {
console.log(this.time)
if (this.time > 0 && this.time <= this.coutDownNumber) {
this.time--;
} else {
this.show = true
this.time = this.coutDownNumber
clearInterval(timer);
timer = null;
}
}, 1000);
}
},
destroyed() {
clearInterval(timer);
}
}
</script>
<style lang="less" scoped>
.sendCodeText {
color: #9c9c9c;
font-size: 12px;
}
.active {
color: #106abc;
}
.coutdDownText {
color: #9c9c9c;
font-size: 12px;
.second {
color: #106abc;
font-size: 16px;
}
}
</style>
\ No newline at end of file \ No newline at end of file
/**
* @name 下拉刷新
* @template new Touch("#app",{option}).then()
* @param {arguments[0]} String 非必填(建议填如id),下拉动态负载,默认body
* @param {option} Object 非必填
* @param {lazy} Number {lazy:100} 下拉响应惰性值默认 100
* @param {time} Number {time:1000} 数据防抖惰性值默认 1000
* @returns then Function xxx.then(arg=>arg) //下拉刷新后回掉
* @name vue页面注入
* @template { methods: {$$onTouch }}
*/
import Vue, { callHook } from "vue";
let setT, $event = new Vue();
class Touch {
constructor(id, opt = {}) {
this.main();
this.createElement(id);
this.generators = new Set();
this.next = null;
this.status = {};
this.opt = Object.assign({
lazy: 200,//下拉取惰性
time: 1000,//数据防抖动值
filter: []
}, opt)
return this;
}
main() {
this.options = {
start: 0,
move: 0,
end: 0,
isTrue: false,//是否拖动到有效值
}
}
then(fun) {
this.generators.add(fun);
return this;
}
createElement(id) {
const doc = (document.documentElement || document.body);
this.self = id ? document.querySelector(id) : doc;
this.parent = this.self == doc ? this.self : this.self.parentNode;
this.element = document.createElement("div");
Object.assign(this.element.style, {
"textAlign": "center", "height": "0", "transform": "translateY(50%)", "position": "fixed",
"top": "0", "left": "0", "width": "100%", "zIndex": "1", "overflow": "hidden"
})
this.arrow = document.createElement("span");
Object.assign(this.arrow.style, {
display: "inline-block",
borderRadius: "50%",
border: "#c00 solid 2px",
borderTop: "none",
width: "50px",
height: "50px",
transform: "translate3d(0,0,0),rotate(0deg)",
})
this.element.appendChild(this.arrow);
let first = this.parent.children[0];
this.parent.insertBefore(this.element, first);
this.addEvent();
}
//事件绑定
addEvent() {
window.addEventListener("touchstart", this.touchstart.bind(this), false);
window.addEventListener("touchmove", this.touchmove.bind(this), false);
window.addEventListener("touchend", this.touchend.bind(this), false)
}
scrollEvent(event) { }
touchstart(event) {
this.touchend();
let { pageX, pageY } = event.targetTouches[0];
if (this.parent.scrollTop <= 0) {
Object.assign(this.options, {
start: pageY,
touchs: true
})
}
}
touchmove(event) {
let { pageX, pageY } = event.targetTouches[0];
let path = location.hash.replace("#", "");
let check = this.opt.filter.filter(item => {
if (item.length > path.length) {
return item.includes(path)
} else {
return path.includes(item)
}
}).length;
if (!this.options.touchs || check) {
this.options.isTrue = false;
return
}
this.options.move = pageY;
let height = pageY - this.options.start;
if (height < 0) {
this.options.isTrue = false;
this.touchend();
return
}
if (height > this.opt.lazy) {
let _height = height - this.opt.lazy;
this.options.isTrue = true;
this.setTransform(_height);
}
//指针归位
this.next = this.generators.values();
}
touchend(event) {
this.setTransform(0); //位置复位
if (setT) { clearTimeout(setT) }
setT = setTimeout(() => {
if (
event && //用户事件
this.options.isTrue //有效拖动
) {
this.runNext(); //执行回掉
}
}, this.opt.time);
//复位
Object.assign(this.options, {
start: 0,
move: 0,
end: 0,
touchs: false
})
}
runNext(item = this.next, ...res) {
this.options.isTrue = false;
let next = item.next();
if (!next.done) {
let fun = next.value(res); //执行
if (/Promise/ig.test(Object.prototype.toString.call(fun))) {
fun.then((params) => {
this.runNext(item, params);
});//处理promise
} else {
this.runNext(item, fun);//处理普通事件
}
} else {
$event.$emit("$$onTouch", res);//发送事件给组件
//指针归位
this.next = this.generators.values();
}
}
setTransform(height) {
Object.assign(this.self.style, {
transform: height > 0 ? `translateY(${height}px)` : "none"
})
Object.assign(this.element.style, {
height: height >= 100 ? "100px" : "0.1px"
// height:height+"px"
})
Object.assign(this.arrow.style, {
transform: `rotate(${height}deg)`
})
}
}
const listeners = {}
$event.$on("$$onTouch", (arg) => {
for (const key in listeners) {
listeners[key](arg)
}
})
export function install(vue, options) {
vue.mixin({
mounted() {
this.refreshInit && (listeners[this._uid] = this.refreshInit)
},
activated() {
this.refreshInit && (listeners[this._uid] = this.refreshInit)
},
destroyed() {
delete listeners[this._uid]
},
deactivated() {
delete listeners[this._uid]
},
})
}
Vue.use(install)
export default Touch;
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import messages from './lang/index'
import { getLocalStorage } from '@/utils/LocalStorage'
Vue.use(VueI18n)
const lang = getLocalStorage('lang') || 'zh'
console.log('lang',lang)
// 通过选项创建 VueI18n 实例
export default new VueI18n({
locale: lang, // 设置地区
messages, // 设置地区信息
silentTranslationWarn: true
})
const buttonEn = {
button: {
ok: 'Ok',
cancel: 'Cancel',
reset: 'Reset',
login: 'Login',
logout: 'Logout',
clickWrong: 'Cancel',
okUnbinding: 'Ok',
clear: 'Clear',
finish: 'Finish',
save: 'Save'
}
}
const buttonZh = {
button: {
ok: '确定',
cancel: '取消',
reset: '重置',
login: '登录',
logout: '退出登录',
clickWrong: '点错了',
okUnbinding: '确定解除',
clear: '清空',
finish: '完成',
save: '保存'
}
}
export default {
buttonEn,
buttonZh
};
\ No newline at end of file \ No newline at end of file
const feedbackEn = {
feedback: {
question: 'Question And FeedBack',
images: 'Image(Not Required,Provide a screenshot of the problem)',
tip: 'Tip: upload images support PNG / jpeg, the size of images is less than 1m, and the number of images is up to four',
}
}
const feedbackZh = {
feedback: {
question: '问题和意见',
images: '图片(选填,提供问题截图)',
tip: '提示:上传图片支持png/jpeg,图片大小1M以内,图片数量最多4张',
}
}
export default {
feedbackEn,
feedbackZh
};
\ No newline at end of file \ No newline at end of file
const En = {
home: {
searchPlaceholder: 'Please enter the content you want to search',
more: 'More',
recommend: 'Recommend',
top: 'Top',
updateDate: 'Update Date:',
disclosureDate: 'Disclosure Date:',
disclosure: 'Information Disclosure',
news: 'News',
registered: 'Registered Issue',
}
}
const Zh = {
home: {
searchPlaceholder: '请输入您想搜索的内容',
more: '更多',
recommend: '推荐',
top: '置顶',
updateDate: '更新日期:',
disclosureDate: '披露日期:',
disclosure: '信息披露',
news: '新闻动态',
registered: '注册发行',
}
}
export default { En, Zh }
\ No newline at end of file \ No newline at end of file
// 全局公用模块
import button from './button/index'
import toast from './toast/index'
// 单独页面模块
import title from './title/index'
import setting from './user/setting'
import center from './user/center'
import person from './user/person'
import feedback from './feedback/index'
import question from './question/index'
import member from './member/index'
import home from './home/index'
import agreement from './qulification/agreement'
import qulification from './qulification/index'
const messages = {
en: {
lang: 'English',
...button.buttonEn,
...toast.toastEn,
...title.titleEn,
...setting.settingEn,
...center.centerEn,
...person.personEn,
...feedback.feedbackEn,
...question.questionEn,
...member.memberEn,
...home.En,
...agreement.agreementEn,
...qulification.qulificationEn
},
zh: {
lang: "中文",
...button.buttonZh,
...toast.toastZh,
...title.titleZh,
...setting.settingZh,
...center.centerZh,
...person.personZh,
...feedback.feedbackZh,
...question.questionZh,
...member.memberZh,
...home.Zh,
...agreement.agreementZh,
...qulification.qulificationZh
}
}
export default messages
const memberEn = {
mlogin: {
code: 'Please input the social credit or the organization code', // 社会信用代码或组织机构代码
password: 'Please input the password', // 密码
verificationCode: 'Please input the verification code', // 验证码
warningTip: "Tip: Please input your unit's login name and password for the membership system(unit member)", // 提示
membershipGuide: 'Membership Guide', // 会员指南
FAQ: 'Membership Handling FAQ', // 户籍办理常见问题
memberRules: 'Member Management Rules' // 会员管理规则
},
mcontact: {
contactName: 'Contact Name', // 联系人姓名
contactType: 'Contact Type', // 联系人类型
dept: 'Department', // 所在部门
position: 'Position', // 职务
officePhone: 'Office Phone', // 办公电话
mobilePhone: 'Mobile Phone' // 移动电话
},
mdetail: {
socialCode: 'Uniform Social Credit Code', // 统一社会信用代码
orgCode: 'Organization Code', // 组织机构代码
orgType: 'Organization Type', // 机构类型
establishedTime: 'Established Time', // 成立时间
corporateRepresentative: 'Corporate Representative', // 法人代表
registeredCapital: 'Registered Capital(Ten Thousand)', // 注册资本(万元)
address: 'Address', // 通讯地址
memberStatus: 'Membership Status', // 会员状态
memberLevel: 'Membership Level', // 会员级别
memberType: 'Membership Type', // 会籍类别
representative: 'Company Representative Name', // 单位代表姓名
businessSituation: 'Business Situation', // 业务开展情况
contactList: 'Contact List' // 联系人列表
},
memberservice: {
tip1: 'Tip: Please log in the Membership System if you want to do some changes', // 提示:如需变更请登入会员系统办理
tip2: 'Tip: Please log in the Membership System if the informations like contact person, mail address, registered address, corporate representative and so on are changed.', // 提示:如联系人,通讯地址,注册地址,法人代表等变更,请登录会员系统办理
more: 'more', // 查看更多
join: 'Join', // 入会
quit: 'Quit', // 退会
change: 'Change', // 变更
},
mbusiness: {
updateTime: 'update time', // 更新时间
},
mprogress: {
joinProgress: 'Join Progress', // 入会进度
quitProgress: 'Quit Progress', // 退会进度
changeProgress: 'Change Progress', // 变更进度
organizationName: 'Organization Name', // 单位名称变更
organizationRepresentive: 'Organization Representive', // 单位代表变更
membershipType: 'Membership Type', // 会籍类别变更
}
}
const memberZh = {
mlogin: {
code: '请输入社会信用代码或组织机构代码', // 社会信用代码或组织机构代码
password: '请输入密码', // 密码
verificationCode: '请输入验证码', // 验证码
warningTip: "提示:请输入贵单位会员系统的登录名及密码登录(单位会员)",
membershipGuide: '入会指南', // 会员指南
FAQ: '会籍办理常见问题', // 户籍办理常见问题
memberRules: '会籍管理规则' // 会员管理规则
},
mcontact: {
contactName: '联系人姓名', // 联系人姓名
contactType: '联系人类型', // 联系人类型
dept: '所在部门', // 所在部门
position: '职务', // 职务
officePhone: '办公电话', // 办公电话
mobilePhone: '移动电话' // 移动电话
},
mdetail: {
socialCode: '统一社会信用代码', // 统一社会信用代码
orgCode: '组织机构代码', // 组织机构代码
orgType: '机构类型', // 机构类型
establishedTime: '成立时间', // 成立时间
corporateRepresentative: '法人代表', // 法人代表
registeredCapital: '注册资本(万元)', // 注册资本(万元)
address: '通讯地址', // 通讯地址
memberStatus: '会员状态', // 会员状态
memberLevel: '会员级别', // 会员级别
memberType: '会籍类别', // 会籍类别
representative: '单位代表姓名', // 单位代表姓名
businessSituation: '业务开展情况', // 业务开展情况
contactList: '联系人列表' // 联系人列表
},
memberservice: {
tip1: '提示:如需变更请登入会员系统办理', // 提示:如需变更请登入会员系统办理
tip2: '提示:如联系人,通讯地址,注册地址,法人代表等变更,请登录会员系统办理', // 提示:如联系人,通讯地址,注册地址,法人代表等变更,请登录会员系统办理
more: '查看更多', // 查看更多
join: '入会', // 入会
quit: '退会', // 退会
change: '变更', // 变更
},
mbusiness: {
updateTime: '更新时间', // 更新时间
},
mprogress: {
joinProgress: '入会进度', // 入会进度
quitProgress: '退会进度', // 退会进度
changeProgress: '变更进度', // 变更进度
organizationName: '单位名称变更', // 单位名称变更
organizationRepresentive: '单位代表变更', // 单位代表变更
membershipType: '会籍类别变更', // 会籍类别变更
}
}
export default {
memberEn,
memberZh
};
const questionEn = {
question: {
askPlaceholder: 'Please enter the question you want to ask',
classification: 'Classification',
question: 'Question'
}
}
const questionZh = {
question: {
askPlaceholder: '请输入您想咨询的问题',
classification: '问题分类',
question: '常见问题'
}
}
export default {
questionEn,
questionZh
};
\ No newline at end of file \ No newline at end of file
const agreementEn = {
agreement: {
time: "chronologically", // 按时间
letter: 'alphabetically', // 按字母
remark: 'Remark', // 备注
},
}
const agreementZh = {
agreement: {
time: "按时间", // 按时间
letter: '按字母', // 按字母
remark: '备注', // 备注
},
}
export default {
agreementEn,
agreementZh
};
const qulificationEn = {
qulification: {
title: "Memberships' and Market Participants' Inquiry", // 会员及市场参与者情况查询
searchAction: {
product: {
name: 'Product', // 非法人产品
key: 'product',
placeholder: "Please input the products' name/manage person", // 请输入产品名/管理人
},
org: {
name: 'Organization', // 机构
key: 'org',
placeholder: "Please input the organizations' name", // 请输入机构名称
}
},
product: 'Product', // 非法人产品
org: 'Organization', // 机构
orgType: 'Organization Type', // 机构类型
productInput: "Please input the products' name/manage person", // 请输入产品名/管理人
orgInput: "Please input the organizations' name", // 请输入机构名称
history: 'Search History', // 搜索历史
membership: 'Membership', // 是否会员
membershipType: 'Membership Type', // 会籍类别
underwriterType: 'Type of Lead Underwriter', // 主承销商类型
marketmaker: 'Market Maker', // 做市商
mitigation: 'Credit Risk Mitigation', // 信用风险缓释工具
masterAgree: 'Signed Master Agreement' // 已签署备案主协议
},
}
const qulificationZh = {
qulification: {
title: '会员及市场参与者情况查询', // 会员及市场参与者情况查询
searchAction: {
product: {
name: '非法人产品', // 非法人产品
key: 'product',
placeholder: '请输入产品名/管理人', // 请输入产品名/管理人
},
org: {
name: '机构', // 机构
key: 'org',
placeholder: '请输入机构名称', // 请输入机构名称
}
},
product: '非法人产品', // 非法人产品
org: '机构', // 机构
orgType: '机构类型', // 机构类型
productInput: "请输入产品名/管理人", // 请输入产品名/管理人
orgInput: "请输入机构名称", // 请输入机构名称
history: '搜索历史', // 搜索历史
membership: '是否会员', // 是否会员
membershipType: '会籍类别', // 会籍类别
underwriterType: '主承销商类型', // 主承销商类型
marketmaker: '做市商', // 做市商
mitigation: '信用风险缓释工具', // 信用风险缓释工具
masterAgree: '已签署备案主协议' // 已签署备案主协议
},
}
export default {
qulificationEn,
qulificationZh
};
const titleEn = {
title: {
home: 'Home',
membershipServices: 'Membership Services',
message: 'Message',
collect: 'Collection',
study: 'Study',
question: 'Question',
questionDetail: 'QuestionDetail',
feedBack: 'FeedBack',
about: 'About',
setting: 'Setting',
resetPassword: 'Reset Password',
privacyPolicy: 'Privacy Policy',
serviceAgreement: 'Service Agreement',
person: 'Personal',
photo: 'Edit Photo',
nickName: 'Edit NickName',
name: 'Edit Name',
nationality: 'Edit Nationality',
email: 'Edit Email',
company: 'Edit Compnay',
regIssue: 'Register Issue'
}
}
const titleZh = {
title: {
home: '首页',
membershipServices: '会籍服务',
message: '我的消息',
collect: '我的收藏',
study: '我的学习',
question: '常见问题',
questionDetail: '常见问题详情',
feedBack: '意见反馈',
about: '关于协会',
setting: '设置',
resetPassword: '重置密码',
privacyPolicy: '隐私政策',
serviceAgreement: '服务协议',
person: '个人信息',
photo: '设置昵称',
nickName: '设置昵称',
name: '设置姓名',
nationality: '设置国籍',
email: '设置邮箱',
company: '设置单位',
regIssue: '注册发行'
}
}
export default {
titleEn,
titleZh
};
\ No newline at end of file \ No newline at end of file
const toastEn = {
toast: {
userName: 'please input username',
phone: 'pleace input correct phone format',
email: 'pleace input correct email format',
tip: 'Tip',
tipMessage: 'After you unbind wechat, you will not be able to use wechat to log in quickly. Are you sure you want to unbind it',
verification: 'please input verification code',
unbindingSuccess: 'Finish!',
resetSuccess: 'Reset Successful',
isEmptyContent: 'Do you want to clear all data?',
freeLoginContent: 'After enabling free login, the system will keep your current login status, no need to go to the login page to login, open the APP to login.',
}
}
const toastZh = {
toast: {
userName: '请输入用户名',
phone: '请输入正确的手机格式',
email: '请输入正确的邮箱格式',
tip: '友情提示',
tipMessage: '解除微信绑定后,将无法使用微信快速登录,你确定解除吗?',
verification: '请输入验证码',
unbindingSuccess: '解绑成功!',
resetSuccess: '重置成功!',
isEmptyContent: '是否要清空全部数据?',
freeLoginContent: '开启免登录后,系统将保留您当前的登录状态,无需前往登录页面进行登录,打开APP即登录。',
}
}
export default {
toastEn,
toastZh
};
\ No newline at end of file \ No newline at end of file
const centerEn = {
center: {
login: 'Login',
konwMore: 'Know More Information',
message: 'Message',
collect: 'Collection',
study: 'Study',
question: 'Question',
feedBack: 'FeedBack',
about: 'About',
setting: 'Setting',
},
}
const centerZh = {
center: {
login: '立即登录',
konwMore: '登录后可了解更多信息',
message: '我的消息',
collect: '我的收藏',
study: '我的学习',
question: '常见问题',
feedBack: '意见反馈',
about: '关于协会',
setting: '设置',
},
}
export default {
centerEn,
centerZh
};
\ No newline at end of file \ No newline at end of file
const personEn = {
person: {
photo: 'Photo',
nickName: 'NickName',
nickNamePlaceholder: 'Please input your nickname',
phoneNumber: 'PhoneNumber',
name: 'Name',
namePlaceholder: 'Please input your name',
nationality: 'Nationality',
nationalityPlaceholder: 'Please select your Nationality',
country: 'Please input Nationality',
birthday: 'BirthDay',
birthdayPlaceholder: 'Please select your birthday',
email: 'Email',
emailPlaceholder: 'Please input your email',
company: 'Company',
companyPlaceholder: 'Please input your company',
},
}
const personZh = {
person: {
photo: '头像',
nickName: '昵称',
nickNamePlaceholder: '请输入您的昵称',
phoneNumber: '手机号',
name: '姓名',
namePlaceholder: '请输入您的姓名',
nationality: '国籍',
nationalityPlaceholder: '请选择您的国籍',
country: '请输入国籍名称',
birthday: '出生日',
birthdayPlaceholder: '请选择您的出生日',
email: '邮箱',
emailPlaceholder: '请输入您的邮箱',
company: '单位',
companyPlaceholder: '请选择您的单位',
},
}
export default {
personEn,
personZh
};
\ No newline at end of file \ No newline at end of file
const settingEn = {
setting: {
language: 'Language',
bindWechat: 'Binding Wechat',
freeLogin: 'Free Login',
resetPassword: 'Reset Password',
privacyPolicy: 'Privacy Policy',
serviceAgreement: 'Service Agreement',
questionAndFeedback: 'Question Feedback',
chinese: 'Chinese',
english: 'English',
fontSize: 'FontSize',
superFontSize: 'Super FontSize',
bigFontSize: 'Big FontSize',
standardFontSize: 'Standard FontSize',
smallFontSize: 'Smaill FontSize',
},
}
const settingZh = {
setting: {
language: '多语言',
bindWechat: '微信绑定',
freeLogin: '免登录',
resetPassword: '重置密码',
privacyPolicy: '隐私政策',
serviceAgreement: '服务协议',
questionAndFeedback: '问题及反馈',
chinese: '中文',
english: '英文',
fontSize: '字体大小',
superFontSize: '特大字体',
bigFontSize: '大字体',
standardFontSize: '标准字体',
smallFontSize: '小字体',
},
}
export default {
settingEn,
settingZh
};
\ No newline at end of file \ No newline at end of file
import Vue from 'vue'
import Vconsole from 'vconsole'
import 'lib-flexible/flexible' // 根据窗口不同,给html设置不同的font-size值
import App from './App.vue'
import router from './router'
import store from './store'
import Axios from '@/utils/Axios'
import '@/utils/Interface'
import '@/utils/vant-ui.js'
import i18n from '@/i18n'
import '@/assets/css/index.less'
const APP_ENV = process.env.VUE_APP_NODE_ENV
Vue.config.productionTip = false
console.log(window.location.href);
const url = window.location.href
if (APP_ENV != 'production') {
if (!url.includes('/#/pdf')) {
const vConsole = new Vconsole()
Vue.use(vConsole)
}
}
// 获取APP 相关信息
store.dispatch('common/AGetAppInfo')
Vue.use({
install(vue) {
Object.assign(vue.prototype, {
$axios: Axios,
$store: store
})
}
})
new Vue({
router,
store,
i18n,
render: h => h(App)
}).$mount('#app')
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '@/views/home/index.vue'
import userRouter from './modules/user'
import memberRouter from './modules/member'
import qulificationRouter from './modules/qualification'
import regIssueRouter from './modules/regIssue'
import homeRouter from './modules/home'
import { NativeMenuApi } from '@/api/NativeApis'
const APP_ENV = process.env.VUE_APP_NODE_ENV
Vue.use(VueRouter)
const routes = [
{
path: '/',
meta: {
token: false,
topType: 3
},
redirect: {
name: 'Catalog'
}
},
{
path: '/home',
name: 'Home',
meta: {
menu: true,
title: '首页'
},
component: Home
},
{
path: '/catalog',
name: 'Catalog',
meta: {
menu: true,
title: '目录'
},
component: () => import(/* webpackChunkName: "catalog" */ '@/views/catalog/') // 首页
},
{
path: '/pdf',
name: 'PdfView',
meta: {
menu: true,
title: '目录'
},
component: () => import(/* webpackChunkName: "PdfView" */ '@/views/pdf/') // 首页
},
{
path: '/pdfTwo',
name: 'PdfViewTwo',
meta: {
menu: true,
title: '目录'
},
component: () => import(/* webpackChunkName: "PdfViewTwo" */ '@/views/pdf/two.vue') // 首页
}
].concat(userRouter, memberRouter, qulificationRouter, regIssueRouter, homeRouter)
const router = new VueRouter({
routes
})
router.beforeEach((to, from, next) => {
const { menu } = to.meta || {}
menu ? NativeMenuApi.nativeMenuShow() : NativeMenuApi.nativeMenuHide()
next()
})
// router后置守卫
router.afterEach((to, from) => {
})
export default router
const Routers = [
{
path: '/home/search',
name: 'GlobalSearch',
meta: {
title: '全局搜索',
isLogin: false
},
component: () => import(/* webpackChunkName: "GlobalSearch" */ '@/views/homeSearch/index.vue') // 全局搜索
},
{
path: '/home/search/result',
name: 'GlobalSearchResult',
meta: {
title: '全局搜索',
isLogin: false
},
component: () => import(/* webpackChunkName: "GlobalSearchResult" */ '@/views/homeSearch/result.vue') // 全局搜索
},
]
export default Routers
\ No newline at end of file \ No newline at end of file
const memberRouter = [{
path: '/member/login',
name: 'MemberLogin',
meta: {
menu: true,
title: '登录'
},
component: () => import( /* webpackChunkName: "memberLogin" */ '@/views/member/memberLogin.vue') // 会员登录
},
{
path: '/member/loginResult',
name: 'LoginResult',
meta: {
title: '会籍服务'
},
component: () => import( /* webpackChunkName: "loginResult" */ '@/views/member/result') // 会籍服务
},
{
path: '/member/memberDetail',
name: 'MemberDetail',
meta: {
title: '会员基本信息'
},
component: () => import( /* webpackChunkName: "memberDetail" */ '@/views/member/result/memberDetail.vue') // 会员基本信息
},
{
path: '/member/memberGuide',
name: 'MemberGuide',
meta: {
title: '入会指南'
},
component: () => import( /* webpackChunkName: "memberGuide" */ '@/views/member/memberGuide.vue') // 入会指南
},
{
path: '/member/contactList',
name: 'ContactList',
meta: {
title: '联系人'
},
component: () => import( /* webpackChunkName: "contactList" */ '@/views/member/contact') // 联系人
},
{
path: '/member/businessList',
name: 'BusinessList',
meta: {
title: '业务开展'
},
component: () => import( /* webpackChunkName: "businessList" */ '@/views/member/business') // 业务开展
},
{
path: '/member/joinProgress',
name: 'JoinProgress',
meta: {
title: '进会进度'
},
component: () => import( /* webpackChunkName: "joinProgress" */ '@/views/member/progress/join.vue') // 进会进度
},
{
path: '/member/quitProgress',
name: 'QuitProgress',
meta: {
title: '退回进度'
},
component: () => import( /* webpackChunkName: "quitProgress" */ '@/views/member/progress/quit.vue') // 退回进度
},
{
path: '/member/changeList',
name: 'ChangeList',
meta: {
title: '变更'
},
component: () => import( /* webpackChunkName: "changeList" */ '@/views/member/progress/change/list.vue') // 变更列表
},
{
path: '/member/changeProgress',
name: 'ChangeProgress',
meta: {
title: '变更进度'
},
component: () => import( /* webpackChunkName: "changeProgress" */ '@/views/member/progress/change') // 变更进度
},
{
path: '/member/projectDetail',
name: 'ProjectDetail',
meta: {
title: '项目详情'
},
component: () => import( /* webpackChunkName: "projectDetail" */ '@/views/member/projectDetail') // 项目详情
}
]
export default memberRouter
const qulificationRouter = [{
path: '/qulification/search',
name: 'QulificationSearch',
meta: {
title: '资质查询'
},
component: () => import( /* webpackChunkName: "qulificationSearch" */ '@/views/qulification/search.vue') // 资质查询
}, {
path: '/qulification/list',
name: 'QulificationList',
meta: {
title: '资质查询'
},
component: () => import( /* webpackChunkName: "qulificationList" */ '@/views/qulification/list.vue') // 业内搜索结果
}, {
path: '/qulification/detail',
name: 'QulificationDetail',
meta: {
title: '资质查询'
},
component: () => import( /* webpackChunkName: "qulificationDetail" */ '@/views/qulification/detail.vue') // 资质详情
}, {
path: '/qulification/masterAgreement',
name: 'MasterAgreement',
meta: {
title: '资质查询'
},
component: () => import( /* webpackChunkName: "masterAgreement" */ '@/views/qulification/agreement/master') // NFAMII主协议
}]
export default qulificationRouter
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!