├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── logo.png ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js ├── prod.env.js └── test.env.js ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── api │ ├── boss.js │ ├── calendar.js │ ├── card.js │ ├── chart.js │ ├── contact.js │ ├── customer.js │ ├── dynamic.js │ ├── footprint.js │ ├── form.js │ ├── login.js │ ├── message.js │ ├── rank.js │ ├── talk.js │ ├── task.js │ ├── upload_file.js │ ├── user_info.js │ └── work.js ├── assets │ ├── audio │ │ ├── audio.mp3 │ │ ├── audio.ogg │ │ └── test.wav │ ├── card │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 2.png │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 9.png │ │ ├── chart1.png │ │ ├── chart2.png │ │ ├── chart3.png │ │ ├── chart4.png │ │ ├── comm.jpg │ │ ├── show_audio.png │ │ └── thumbnail │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ └── 8.png │ ├── icon │ │ ├── 123_03.png │ │ ├── 123_07.png │ │ ├── 123_09.png │ │ ├── 33_03.png │ │ ├── 33_06.png │ │ ├── 33_08.png │ │ ├── PingLun.jpg │ │ ├── QR.png │ │ ├── add.png │ │ ├── audio.png │ │ ├── bar.png │ │ ├── calendar.png │ │ ├── calendar_rank.png │ │ ├── card_edit_03.jpg │ │ ├── card_edit_06.jpg │ │ ├── card_edit_08.jpg │ │ ├── card_edit_10.jpg │ │ ├── comment.png │ │ ├── contact.png │ │ ├── contact2.png │ │ ├── del_icon.png │ │ ├── edit.png │ │ ├── error.png │ │ ├── error1.png │ │ ├── face.png │ │ ├── fork.png │ │ ├── index.png │ │ ├── index2.png │ │ ├── jia.png │ │ ├── liao_diannao.png │ │ ├── liao_dong.png │ │ ├── liao_quan.png │ │ ├── liao_ren.png │ │ ├── loading_1.png │ │ ├── loading_2.png │ │ ├── message.png │ │ ├── message2.png │ │ ├── more.png │ │ ├── my_03.png │ │ ├── my_06.png │ │ ├── my_11.png │ │ ├── my_14.png │ │ ├── my_16.png │ │ ├── network.png │ │ ├── news.png │ │ ├── news2.png │ │ ├── none_icon_03.png │ │ ├── none_icon_05.png │ │ ├── none_icon_08.png │ │ ├── none_icon_11.png │ │ ├── none_icon_14.png │ │ ├── phone.png │ │ ├── select_icon_03.png │ │ ├── select_icon_05.png │ │ ├── select_icon_08.png │ │ ├── select_icon_11.png │ │ ├── select_icon_14.png │ │ ├── self.png │ │ ├── self2.png │ │ ├── service.png │ │ ├── top.png │ │ ├── top1.png │ │ ├── top2.png │ │ ├── top3.png │ │ ├── w1.jpg │ │ ├── w2.jpg │ │ ├── w3.jpg │ │ ├── w4.jpg │ │ ├── w5.jpg │ │ ├── w6.jpg │ │ ├── w7.jpg │ │ ├── w_s.jpg │ │ ├── wchat.png │ │ ├── xiao.png │ │ ├── 保存号码.png │ │ ├── 动态点赞.png │ │ ├── 复制公司名称.png │ │ ├── 复制邮箱.png │ │ ├── 拨打座机.png │ │ ├── 查看动态.png │ │ └── 标题点赞.png │ ├── img │ │ ├── assign.png │ │ ├── back_btn.png │ │ ├── back_img.png │ │ ├── calendar.png │ │ ├── calendar1.png │ │ ├── calendar2.png │ │ ├── calendar3.png │ │ ├── calendar4.png │ │ ├── calendar5.png │ │ ├── card.png │ │ ├── card2.png │ │ ├── chart.png │ │ ├── chart1.png │ │ ├── chart2.png │ │ ├── chart3.png │ │ ├── chart4.png │ │ ├── chatBg.png │ │ ├── code.png │ │ ├── comment.png │ │ ├── comment02.png │ │ ├── comment2.png │ │ ├── datapicker.png │ │ ├── datepickerGray.png │ │ ├── detail.png │ │ ├── edit-icon.png │ │ ├── follow-icon.png │ │ ├── form.png │ │ ├── heart-black.png │ │ ├── heart-blue.png │ │ ├── heart.png │ │ ├── heart_s.png │ │ ├── inter.png │ │ ├── l.gif │ │ ├── list_pic_moren.png │ │ ├── message-icon.png │ │ ├── message.png │ │ ├── message2.png │ │ ├── moren.jpg │ │ ├── my-icon.png │ │ ├── news.png │ │ ├── p_icon.jpg │ │ ├── product.png │ │ ├── r_banner.png │ │ ├── selfCard.png │ │ ├── set.png │ │ ├── six.png │ │ ├── sort.png │ │ ├── tabbar.png │ │ ├── task-icon.png │ │ ├── task.png │ │ ├── trueland.png │ │ ├── u112.png │ │ ├── warning.png │ │ ├── wchat.png │ │ └── weixin.png │ ├── nav │ │ ├── address1.png │ │ ├── address3.png │ │ ├── address4.png │ │ ├── calendar.png │ │ ├── card.png │ │ ├── cellphone1.png │ │ ├── chat.png │ │ ├── email.png │ │ ├── email2.png │ │ ├── email3.png │ │ ├── email4.png │ │ ├── hi.png │ │ ├── manage.png │ │ ├── map.png │ │ ├── map2.png │ │ ├── news.png │ │ ├── phone.png │ │ ├── phone2.png │ │ ├── phone3.png │ │ ├── phone4.png │ │ ├── report.png │ │ ├── setting.png │ │ └── step.png │ └── task │ │ ├── calendar.png │ │ ├── calendar_icon.png │ │ ├── demo_img.png │ │ ├── empty_task.png │ │ ├── mark.png │ │ ├── selected.png │ │ ├── selected_star.png │ │ ├── unmark.png │ │ └── unselected.png ├── components │ ├── cardViewer │ │ └── index.vue │ └── footer │ │ └── index.vue ├── error.vue ├── main.js ├── permission.js ├── router │ └── index.js ├── store │ ├── index.js │ └── modules │ │ ├── app.js │ │ ├── chat.js │ │ ├── err.js │ │ ├── message.js │ │ ├── tab.js │ │ ├── user.js │ │ └── work.js ├── styles │ ├── card.scss │ ├── iconfont.css │ ├── index.scss │ ├── reset.scss │ ├── vux.scss │ └── vux_theme.less ├── utils │ ├── auth.js │ ├── base.js │ ├── card_template.js │ ├── emoj.js │ ├── global.js │ ├── rem.js │ └── request.js ├── views │ ├── boss │ │ ├── card.vue │ │ └── index.vue │ ├── card │ │ ├── case.vue │ │ ├── editCard.vue │ │ ├── produce.vue │ │ └── selfCard.vue │ ├── client │ │ ├── follow.vue │ │ ├── followRecord.vue │ │ ├── index.vue │ │ ├── infor.vue │ │ └── tag.vue │ ├── contacts │ │ ├── insertClient.vue │ │ ├── insertTag.vue │ │ └── updateTag.vue │ ├── form │ │ ├── formData.vue │ │ ├── formDetail.vue │ │ └── formList.vue │ ├── home │ │ ├── contact.vue │ │ ├── index.vue │ │ ├── main.vue │ │ ├── message.vue │ │ ├── news.vue │ │ └── self.vue │ ├── homeList │ │ ├── callPhone.vue │ │ ├── seeCard.vue │ │ └── seeWebsite.vue │ ├── messageManage │ │ ├── IM.vue │ │ ├── detail.vue │ │ ├── index.vue │ │ └── tpl.vue │ ├── news │ │ ├── companyDetails.vue │ │ ├── detail.vue │ │ ├── publish.vue │ │ └── self.vue │ ├── rank │ │ ├── diagram.vue │ │ ├── historyRank.vue │ │ └── index.vue │ ├── self │ │ ├── calendar.vue │ │ ├── calendarDetail.vue │ │ ├── chatWindow.vue │ │ ├── edit_list.vue │ │ ├── insertCalendar.vue │ │ ├── personal_label.vue │ │ ├── qrcode.vue │ │ ├── recommended_case.vue │ │ ├── recommended_product.vue │ │ ├── reportChart.vue │ │ ├── sayHi.vue │ │ ├── saySetting.vue │ │ ├── setting.vue │ │ ├── talkDetail.vue │ │ ├── talkInsert.vue │ │ ├── talkManage.vue │ │ ├── talkUpdate.vue │ │ └── updateCalendar.vue │ ├── task │ │ ├── addTask.vue │ │ ├── taskCalendar.vue │ │ ├── taskDetail.vue │ │ └── taskList.vue │ └── work │ │ └── index.vue └── warning.vue ├── static ├── .gitkeep ├── css │ ├── base.css │ ├── face.css │ └── index_loading.css └── image │ ├── 0.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ ├── l.gif │ ├── loading_1.png │ ├── loading_2.png │ ├── moren.jpg │ ├── p_icon.jpg │ └── qqface.png └── test ├── e2e ├── custom-assertions │ └── elementCount.js ├── nightwatch.conf.js ├── runner.js └── specs │ └── test.js └── unit ├── .eslintrc ├── jest.conf.js ├── setup.js └── specs └── HelloWorld.spec.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | /test/unit/coverage/ 6 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | .svn 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | /test/unit/coverage/ 9 | /test/e2e/reports/ 10 | selenium-debug.log 11 | 12 | # Editor directories and files 13 | .idea 14 | .vscode 15 | *.suo 16 | *.ntvs* 17 | *.njsproj 18 | *.sln 19 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ai-card 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | 20 | # run unit tests 21 | npm run unit 22 | 23 | # run e2e tests 24 | npm run e2e 25 | 26 | # run all tests 27 | npm test 28 | ``` 29 | 30 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 31 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/build/logo.png -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function (options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | const vuxLoader = require('vux-loader') 7 | 8 | function resolve (dir) { 9 | return path.join(__dirname, '..', dir) 10 | } 11 | 12 | const createLintingRule = () => ({ 13 | test: /\.(js|vue)$/, 14 | loader: 'eslint-loader', 15 | enforce: 'pre', 16 | include: [resolve('src'), resolve('test')], 17 | options: { 18 | formatter: require('eslint-friendly-formatter'), 19 | emitWarning: !config.dev.showEslintErrorsInOverlay 20 | } 21 | }) 22 | 23 | const webpackConfig = { 24 | context: path.resolve(__dirname, '../'), 25 | entry: { 26 | app: './src/main.js' 27 | }, 28 | output: { 29 | path: config.build.assetsRoot, 30 | filename: '[name].js', 31 | publicPath: process.env.NODE_ENV === 'production' 32 | ? config.build.assetsPublicPath 33 | : config.dev.assetsPublicPath 34 | }, 35 | resolve: { 36 | extensions: ['.js', '.vue', '.json', '.less'], 37 | alias: { 38 | 'vue$': 'vue/dist/vue.esm.js', 39 | '@': resolve('src') 40 | } 41 | }, 42 | module: { 43 | rules: [ 44 | ...(config.dev.useEslint ? [createLintingRule()] : []), 45 | { 46 | test: /\.vue$/, 47 | loader: 'vue-loader', 48 | options: vueLoaderConfig 49 | }, 50 | { 51 | test: /\.js$/, 52 | loader: 'babel-loader', 53 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 54 | }, 55 | { 56 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 57 | loader: 'url-loader', 58 | options: { 59 | limit: 10000, 60 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 61 | } 62 | }, 63 | { 64 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 65 | loader: 'url-loader', 66 | options: { 67 | limit: 10000, 68 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 69 | } 70 | }, 71 | { 72 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 73 | loader: 'url-loader', 74 | options: { 75 | limit: 10000, 76 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 77 | } 78 | } 79 | ] 80 | }, 81 | node: { 82 | // prevent webpack from injecting useless setImmediate polyfill because Vue 83 | // source contains it (although only uses it if it's native). 84 | setImmediate: false, 85 | // prevent webpack from injecting mocks to Node native modules 86 | // that does not make sense for the client 87 | dgram: 'empty', 88 | fs: 'empty', 89 | net: 'empty', 90 | tls: 'empty', 91 | child_process: 'empty' 92 | } 93 | } 94 | module.exports = vuxLoader.merge(webpackConfig, { plugins: ['vux-ui', 'progress-bar', 'duplicate-style', {name: 'less-theme', path: 'src/styles/vux_theme.less'}] }) 95 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const path = require('path') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 11 | const portfinder = require('portfinder') 12 | 13 | const HOST = process.env.HOST 14 | const PORT = process.env.PORT && Number(process.env.PORT) 15 | 16 | const devWebpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 19 | }, 20 | // cheap-module-eval-source-map is faster for development 21 | devtool: config.dev.devtool, 22 | 23 | // these devServer options should be customized in /config/index.js 24 | devServer: { 25 | clientLogLevel: 'warning', 26 | historyApiFallback: { 27 | rewrites: [ 28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') } 29 | ] 30 | }, 31 | hot: true, 32 | contentBase: false, // since we use CopyWebpackPlugin. 33 | compress: true, 34 | host: HOST || config.dev.host, 35 | port: PORT || config.dev.port, 36 | open: config.dev.autoOpenBrowser, 37 | overlay: config.dev.errorOverlay 38 | ? { warnings: false, errors: true } 39 | : false, 40 | publicPath: config.dev.assetsPublicPath, 41 | proxy: config.dev.proxyTable, 42 | quiet: true, // necessary for FriendlyErrorsPlugin 43 | watchOptions: { 44 | poll: config.dev.poll 45 | } 46 | }, 47 | plugins: [ 48 | new webpack.DefinePlugin({ 49 | 'process.env': require('../config/dev.env') 50 | }), 51 | new webpack.HotModuleReplacementPlugin(), 52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 53 | new webpack.NoEmitOnErrorsPlugin(), 54 | // https://github.com/ampedandwired/html-webpack-plugin 55 | new HtmlWebpackPlugin({ 56 | filename: 'index.html', 57 | template: 'index.html', 58 | inject: true 59 | }), 60 | // copy custom static assets 61 | new CopyWebpackPlugin([ 62 | { 63 | from: path.resolve(__dirname, '../static'), 64 | to: config.dev.assetsSubDirectory, 65 | ignore: ['.*'] 66 | } 67 | ]) 68 | ] 69 | }) 70 | 71 | module.exports = new Promise((resolve, reject) => { 72 | portfinder.basePort = process.env.PORT || config.dev.port 73 | portfinder.getPort((err, port) => { 74 | if (err) { 75 | reject(err) 76 | } else { 77 | // publish the new Port, necessary for e2e tests 78 | process.env.PORT = port 79 | // add port to devServer config 80 | devWebpackConfig.devServer.port = port 81 | 82 | // Add FriendlyErrorsPlugin 83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 84 | compilationSuccessInfo: { 85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`] 86 | }, 87 | onErrors: config.dev.notifyOnErrors 88 | ? utils.createNotifierCallback() 89 | : undefined 90 | })) 91 | 92 | resolve(devWebpackConfig) 93 | } 94 | }) 95 | }) 96 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"', 7 | BASE_API: '"http://jiatui.api.com"' 8 | }) 9 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: { 14 | '/index.php': { 15 | //target: 'https://tyunzhentui.71360.com', 16 | target: 'https://zhentuityun.71360.com', 17 | changeOrigin: true, 18 | pathRewrite: { 19 | '^/index.php': '' 20 | } 21 | } 22 | }, 23 | // token: '7%21%C2n%7D%0B%7E%81%8E%88%A7%3C%7C%D3%2A%95i%BB%AFG%F6%0F%B6%9D%DD%FC%9E%86-Y%96%3A%C9%93%8D%FD%E6%C9%04%8C%8F%D2j%F4%F2%B3%A0BU%AD%DA%81%8D%C4%CD%07.qGG%C9%16FN', 24 | token: 'TnlIQ2JuMExmb0dMSVFnRytGVmRuR203cjBmMkQ3YWQzZnllaGkxWmxqclM0bC9SK1UyNDVvL1NhdlR5czZCQ1ZhM2FnWTNFelFjdWNVZEh5UlpHVGc9PQ%3D%3D', 25 | 26 | // Various Dev Server settings 27 | host: '0.0.0.0', // can be overwritten by process.env.HOST 28 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 29 | autoOpenBrowser: true, 30 | errorOverlay: true, 31 | notifyOnErrors: true, 32 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 33 | 34 | // Use Eslint Loader? 35 | // If true, your code will be linted during bundling and 36 | // linting errors and warnings will be shown in the console. 37 | useEslint: true, 38 | // If true, eslint errors and warnings will also be shown in the error overlay 39 | // in the browser. 40 | showEslintErrorsInOverlay: false, 41 | 42 | /** 43 | * Source Maps 44 | */ 45 | 46 | // https://webpack.js.org/configuration/devtool/#development 47 | devtool: 'cheap-module-eval-source-map', 48 | 49 | // If you have problems debugging vue-files in devtools, 50 | // set this to false - it *may* help 51 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 52 | cacheBusting: true, 53 | 54 | cssSourceMap: true 55 | }, 56 | 57 | build: { 58 | // Template for index.html 59 | index: path.resolve(__dirname, '../dist/index.html'), 60 | 61 | // Paths 62 | assetsRoot: path.resolve(__dirname, '../dist'), 63 | assetsSubDirectory: 'static', 64 | assetsPublicPath: './', 65 | 66 | /** 67 | * Source Maps 68 | */ 69 | 70 | productionSourceMap: true, 71 | // https://webpack.js.org/configuration/devtool/#production 72 | devtool: '#source-map', 73 | 74 | // Gzip off by default as many popular static hosts such as 75 | // Surge or Netlify already gzip all static assets for you. 76 | // Before setting to `true`, make sure to: 77 | // npm install --save-dev compression-webpack-plugin 78 | productionGzip: false, 79 | productionGzipExtensions: ['js', 'css'], 80 | 81 | // Run the build command with an extra argument to 82 | // View the bundle analyzer report after build finishes: 83 | // `npm run build --report` 84 | // Set to `true` or `false` to always turn it on or off 85 | bundleAnalyzerReport: process.env.npm_config_report 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"', 4 | BASE_API: '"http://192.168.40.66:8080"' 5 | } 6 | -------------------------------------------------------------------------------- /config/test.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const devEnv = require('./dev.env') 4 | 5 | module.exports = merge(devEnv, { 6 | NODE_ENV: '"testing"' 7 | }) 8 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 智能名片 8 | <% if(process.env.NODE_ENV === 'development'){%> 9 | 10 | <% }else{ %> 11 | 12 | <% } %> 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 |
21 |
22 | <% if(process.env.NODE_ENV === 'development'){%> 23 | 24 | 25 | <% }else{ %> 26 | 27 | 28 | <% } %> 29 |
30 |

首次加载稍慢

31 |
32 |
33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ai-card", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "kaker <614170417@qq.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "unit": "jest --config test/unit/jest.conf.js --coverage", 11 | "e2e": "node test/e2e/runner.js", 12 | "test": "npm run unit && npm run e2e", 13 | "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs", 14 | "build": "node build/build.js" 15 | }, 16 | "dependencies": { 17 | "axios": "^0.18.0", 18 | "echarts": "^4.1.0", 19 | "html2canvas": "^1.0.0-alpha.12", 20 | "js-cookie": "^2.2.0", 21 | "upng-js": "^2.1.0", 22 | "vconsole": "^3.2.0", 23 | "vue": "^2.5.2", 24 | "vue-cropperjs": "^2.2.2", 25 | "vue-router": "^3.0.1", 26 | "vuex": "^3.0.1", 27 | "vux": "^2.9.2" 28 | }, 29 | "devDependencies": { 30 | "autoprefixer": "^7.1.2", 31 | "babel-core": "^6.22.1", 32 | "babel-eslint": "^8.2.1", 33 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 34 | "babel-jest": "^21.0.2", 35 | "babel-loader": "^7.1.1", 36 | "babel-plugin-dynamic-import-node": "^1.2.0", 37 | "babel-plugin-syntax-jsx": "^6.18.0", 38 | "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", 39 | "babel-plugin-transform-runtime": "^6.22.0", 40 | "babel-plugin-transform-vue-jsx": "^3.5.0", 41 | "babel-preset-env": "^1.3.2", 42 | "babel-preset-stage-2": "^6.22.0", 43 | "babel-register": "^6.22.0", 44 | "chalk": "^2.0.1", 45 | "chromedriver": "^2.27.2", 46 | "copy-webpack-plugin": "^4.0.1", 47 | "cross-spawn": "^5.0.1", 48 | "css-loader": "^0.28.0", 49 | "eslint": "^4.15.0", 50 | "eslint-config-standard": "^10.2.1", 51 | "eslint-friendly-formatter": "^3.0.0", 52 | "eslint-loader": "^1.7.1", 53 | "eslint-plugin-import": "^2.7.0", 54 | "eslint-plugin-node": "^5.2.0", 55 | "eslint-plugin-promise": "^3.4.0", 56 | "eslint-plugin-standard": "^3.0.1", 57 | "eslint-plugin-vue": "^4.0.0", 58 | "extract-text-webpack-plugin": "^3.0.0", 59 | "file-loader": "^1.1.4", 60 | "friendly-errors-webpack-plugin": "^1.6.1", 61 | "html-webpack-plugin": "^2.30.1", 62 | "jest": "^22.0.4", 63 | "jest-serializer-vue": "^0.3.0", 64 | "less": "^3.8.1", 65 | "less-loader": "^4.1.0", 66 | "nightwatch": "^0.9.12", 67 | "node-notifier": "^5.1.2", 68 | "node-sass": "^4.9.3", 69 | "optimize-css-assets-webpack-plugin": "^3.2.0", 70 | "ora": "^1.2.0", 71 | "portfinder": "^1.0.13", 72 | "postcss-import": "^11.0.0", 73 | "postcss-loader": "^2.0.8", 74 | "postcss-url": "^7.2.1", 75 | "rimraf": "^2.6.0", 76 | "sass-loader": "^7.1.0", 77 | "selenium-server": "^3.0.1", 78 | "semver": "^5.3.0", 79 | "shelljs": "^0.7.6", 80 | "uglifyjs-webpack-plugin": "^1.1.1", 81 | "url-loader": "^0.5.8", 82 | "vue-jest": "^1.0.2", 83 | "vue-loader": "^13.3.0", 84 | "vue-style-loader": "^3.0.1", 85 | "vue-template-compiler": "^2.5.2", 86 | "vux-loader": "^1.2.9", 87 | "webpack": "^3.6.0", 88 | "webpack-bundle-analyzer": "^2.9.0", 89 | "webpack-dev-server": "^2.9.1", 90 | "webpack-merge": "^4.1.0" 91 | }, 92 | "engines": { 93 | "node": ">= 6.0.0", 94 | "npm": ">= 3.0.0" 95 | }, 96 | "browserslist": [ 97 | "> 1%", 98 | "last 2 versions", 99 | "not ie <= 8" 100 | ] 101 | } 102 | -------------------------------------------------------------------------------- /src/api/boss.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // Boss雷达-总览 4 | export function bossOverview (listQuery) { 5 | return request({ 6 | url: '/ai/boss/index', 7 | method: 'GET', 8 | params: { 9 | dept: listQuery.dept, 10 | active: listQuery.active, 11 | time_type: listQuery.time_type, 12 | user_type: listQuery.user_type 13 | } 14 | }) 15 | } 16 | 17 | // Boss雷达-总览-总数 18 | export function bossOverviewTotal (listQuery) { 19 | return request({ 20 | url: '/ai/boss/index_data', 21 | method: 'GET', 22 | params: { 23 | dept: listQuery.dept, 24 | time_type: listQuery.time_type 25 | } 26 | }) 27 | } 28 | 29 | // Boss雷达-总览-客户统计 30 | export function customerStatistics (listQuery) { 31 | return request({ 32 | url: '/ai/boss/index_user', 33 | method: 'GET', 34 | params: { 35 | dept: listQuery.dept, 36 | type: listQuery.type, 37 | user_type: listQuery.user_type 38 | } 39 | }) 40 | } 41 | 42 | // Boss雷达-AI分析 43 | export function AIAnalyse (listQuery) { 44 | return request({ 45 | url: '/ai/boss/index', 46 | method: 'GET', 47 | params: { 48 | dept: listQuery.dept, 49 | active: listQuery.active, 50 | keywords: listQuery.keywords 51 | } 52 | }) 53 | } 54 | // Boss雷达-AI分析详情 55 | export function AIAnalyseDetail (listQuery) { 56 | return request({ 57 | url: '/ai/boss/read', 58 | method: 'GET', 59 | params: { 60 | type: listQuery.type, 61 | date_type: listQuery.date_type, 62 | time_type: listQuery.time_type, 63 | employ_id: listQuery.employ_id 64 | } 65 | }) 66 | } 67 | // Boss雷达-销售排行 68 | export function salesRanking (listQuery) { 69 | return request({ 70 | url: '/ai/boss/index', 71 | method: 'get', 72 | params: { 73 | dept: listQuery.dept, 74 | active: listQuery.active, 75 | type: listQuery.type, 76 | user_type: listQuery.user_type, 77 | interaction: listQuery.interaction, 78 | probability_type: listQuery.probability_type, 79 | interaction_time: listQuery.interaction_time, 80 | keywords: listQuery.keywords 81 | } 82 | }) 83 | } 84 | 85 | // 获取部门分类&获取话术分类列表,根据type的不同:dept:部门 verbal:话术 86 | export function getTypelist (deptType) { 87 | return request({ 88 | url: '/ai/Category/index?active=6&type=' + deptType, 89 | method: 'GET' 90 | }) 91 | } 92 | -------------------------------------------------------------------------------- /src/api/calendar.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function calendarSave (data) { 4 | // 新建日程 5 | return request({ 6 | url: '/ai/calendar/save', 7 | method: 'post', 8 | data: data 9 | }) 10 | } 11 | 12 | export function calendarList (data) { 13 | // 日程列表 14 | return request({ 15 | url: '/ai/calendar/index', 16 | method: 'get', 17 | params: data 18 | }) 19 | } 20 | export function getDays (time) { 21 | // 当月有日程日期数组集合 22 | return request({ 23 | url: '/ai/calendar/getCalendarDays?month=' + time, 24 | method: 'get' 25 | }) 26 | } 27 | export function calendarType () { 28 | // 日程列表类型 29 | return request({ 30 | url: '/ai/calendar/getType', 31 | method: 'get' 32 | }) 33 | } 34 | 35 | export function calendarRead (data) { 36 | // 日程详情 37 | return request({ 38 | url: '/ai/calendar/read', 39 | method: 'get', 40 | params: data 41 | }) 42 | } 43 | 44 | export function calendarUpdate (data) { 45 | // 编辑日程 46 | return request({ 47 | url: '/ai/calendar/update', 48 | method: 'post', 49 | data: data 50 | }) 51 | } 52 | 53 | export function calendarDelete (data) { 54 | // 删除日程 55 | return request({ 56 | url: '/ai/calendar/delete', 57 | method: 'post', 58 | data: data 59 | }) 60 | } 61 | 62 | export function employsetUpdate (data) { 63 | // 更新欢迎语设置 64 | return request({ 65 | url: '/ai/employset/update', 66 | method: 'post', 67 | data: data 68 | }) 69 | } 70 | 71 | export function employsetRead (data) { 72 | // 读取欢迎语设置 73 | return request({ 74 | url: '/ai/employset/read', 75 | method: 'get', 76 | params: data 77 | }) 78 | } 79 | 80 | export function employsetDelete (data) { 81 | // 欢迎语设置标签删除 82 | return request({ 83 | url: '/ai/EmploySet/delete', 84 | method: 'post', 85 | data: data 86 | }) 87 | } 88 | -------------------------------------------------------------------------------- /src/api/card.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function wxConfig (url) { 4 | const data = { 5 | url: url 6 | } 7 | // 企业微信配置 8 | return request({ 9 | url: '/ai/weworkapi/getConfigData', 10 | method: 'post', 11 | data 12 | }) 13 | } 14 | 15 | export function cardRead () { 16 | // 我的名片详情 17 | return request({ 18 | url: '/ai/card/read', 19 | method: 'get' 20 | }) 21 | } 22 | 23 | export function updateCard (data) { 24 | // 编辑名片详情 25 | return request({ 26 | url: '/ai/card/update', 27 | method: 'post', 28 | data: data 29 | }) 30 | } 31 | 32 | export function produceList (data) { 33 | // 编辑名片详情 34 | return request({ 35 | url: '/ai/Scratch/webClient', 36 | method: 'post', 37 | data: data 38 | }) 39 | } 40 | 41 | export function getPosterImg () { 42 | // 名片海报 43 | return request({ 44 | url: '/ai/employSet/getPosterImg', 45 | method: 'get' 46 | }) 47 | } 48 | 49 | export function cardTagDelete (data) { 50 | // 删除名片上的标签 51 | return request({ 52 | url: '/ai/card/employ_tag_del', 53 | method: 'post', 54 | data: data 55 | }) 56 | } 57 | 58 | export function cardTagInsert (data) { 59 | // 增加名片上的标签 60 | return request({ 61 | url: '/ai/card/set_employ_tag', 62 | method: 'post', 63 | data: data 64 | }) 65 | } 66 | 67 | export function employgoodsIndex (data) { 68 | // 产品列表 69 | return request({ 70 | url: '/ai/employgoods/index', 71 | method: 'get', 72 | params: data 73 | }) 74 | } 75 | 76 | export function employgoodsSave (data) { 77 | // 推荐产品 78 | return request({ 79 | url: '/ai/employgoods/save', 80 | method: 'post', 81 | data: data 82 | }) 83 | } 84 | 85 | export function employgoodsDetele (data) { 86 | // 取消推荐产品 87 | return request({ 88 | url: '/ai/employgoods/delete', 89 | method: 'post', 90 | data: data 91 | }) 92 | } 93 | 94 | export function employcaseIndex (data) { 95 | // 案例列表 96 | return request({ 97 | url: '/ai/employcase/index', 98 | method: 'get', 99 | params: data 100 | }) 101 | } 102 | 103 | export function employcaseSave (data) { 104 | // 推荐案例 105 | return request({ 106 | url: '/ai/employcase/save', 107 | method: 'post', 108 | data: data 109 | }) 110 | } 111 | 112 | export function employcaseDetele (data) { 113 | // 取消推荐案例 114 | return request({ 115 | url: '/ai/employcase/delete', 116 | method: 'post', 117 | data: data 118 | }) 119 | } 120 | 121 | export function webClient (data) { 122 | // 产品分类 123 | return request({ 124 | url: '/ai/Scratch/webClient', 125 | method: 'post', 126 | data: data 127 | }) 128 | } 129 | // 上传录音 130 | export function uploadMedia (data) { 131 | // 推荐产品 132 | return request({ 133 | url: '/ai/upload/uploadAudio?media_id=' + data, 134 | method: 'get' 135 | }) 136 | } 137 | -------------------------------------------------------------------------------- /src/api/chart.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function getMyNums (data) { 4 | // 我的报表数据 5 | return request({ 6 | url: '/ai/EmploySet/getMyNums', 7 | method: 'get', 8 | params: data 9 | }) 10 | } 11 | 12 | export function getMyChart () { 13 | // 我的报表图表 14 | return request({ 15 | url: '/ai/EmploySet/getMyNumsOne', 16 | method: 'get' 17 | }) 18 | } 19 | 20 | //不在线 21 | export function not_online (data) { 22 | // 我的报表图表 23 | return request({ 24 | url: '/ai/Weworkapi/setWechatMessage', 25 | method: 'post', 26 | data:data 27 | }) 28 | } 29 | 30 | //每条推送 31 | export function one_chat (data) { 32 | return request({ 33 | url: '/ai/Customerchat/save', 34 | method: 'post', 35 | data:data 36 | }) 37 | } 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/api/contact.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function customerList (data) { 4 | // 客户列表 5 | return request({ 6 | url: '/ai/Customer/index', 7 | method: 'get', 8 | params: data 9 | }) 10 | } 11 | 12 | export function customerTagList () { 13 | // 客户标签列表 14 | return request({ 15 | url: '/ai/Customertag/tagList', 16 | method: 'get' 17 | }) 18 | } 19 | 20 | export function insertCustomerTag (data) { 21 | // 新增客户标签 22 | return request({ 23 | url: '/ai/Customertag/save', 24 | method: 'post', 25 | data: data 26 | }) 27 | } 28 | 29 | export function getCustomerTagEdit (data) { 30 | // 查看客户标签详情 31 | return request({ 32 | url: '/ai/Customertag/edit', 33 | method: 'get', 34 | params: data 35 | }) 36 | } 37 | 38 | export function updateCustomerTag (data) { 39 | // 更新客户标签详情 40 | return request({ 41 | url: '/ai/Customertag/update', 42 | method: 'POST', 43 | data: data 44 | }) 45 | } 46 | 47 | export function deleteCustomerTag (data) { 48 | // 标签删除客户 49 | return request({ 50 | url: '/ai/Customertag/delete', 51 | method: 'POST', 52 | data: data 53 | }) 54 | } 55 | 56 | export function del_label (data) { 57 | // 标签删除客户 58 | return request({ 59 | url: '/ai/Customertag/delTag', 60 | method: 'POST', 61 | data: data 62 | }) 63 | } -------------------------------------------------------------------------------- /src/api/customer.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function customerRead (data) { 4 | // (客户详情)资料读取 5 | return request({ 6 | url: '/ai/Customer/read', 7 | method: 'get', 8 | params: data 9 | }) 10 | } 11 | 12 | export function customerSetTurnover (data) { 13 | // (客户详情)成交率设置 14 | return request({ 15 | url: '/ai/Customer/setTurnover', 16 | method: 'post', 17 | data: data 18 | }) 19 | } 20 | 21 | export function customerSetTurnoverDate (data) { 22 | // (客户详情)成交日期设置 23 | return request({ 24 | url: '/ai/Customer/setTurnoverDate', 25 | method: 'post', 26 | data: data 27 | }) 28 | } 29 | 30 | export function customerUpdate (data) { 31 | // (客户详情)资料更新 32 | return request({ 33 | url: '/ai/Customer/update', 34 | method: 'post', 35 | data: data 36 | }) 37 | } 38 | 39 | export function customerEdit (data) { 40 | // (客户详情)资料获取 41 | return request({ 42 | url: '/ai/Customer/edit', 43 | method: 'get', 44 | params: data 45 | }) 46 | } 47 | 48 | export function customerTag (data) { 49 | // (客户详情)客户标签 50 | return request({ 51 | url: '/ai/Customertag/index', 52 | method: 'get', 53 | params: data 54 | }) 55 | } 56 | 57 | export function followCreate () { 58 | // 跟进记录添加(常用术语) 59 | return request({ 60 | url: '/ai/Follow/create', 61 | method: 'get' 62 | }) 63 | } 64 | 65 | export function followSave (data) { 66 | // 跟进记录添加(常用术语) 67 | return request({ 68 | url: '/ai/Follow/save', 69 | method: 'post', 70 | data: data 71 | }) 72 | } 73 | 74 | export function visitIndex (data) { 75 | // 指定客户互动 76 | return request({ 77 | url: '/ai/Visit/index', 78 | method: 'post', 79 | params: data 80 | }) 81 | } 82 | 83 | export function followIndex (data) { 84 | // 指定客户跟进记录 85 | return request({ 86 | url: '/ai/Follow/index', 87 | method: 'post', 88 | data 89 | }) 90 | } 91 | 92 | export function setBirthdayAdd (data) { 93 | // 同步客户生日 94 | return request({ 95 | url: '/ai/Calendar/setBirthdayAdd', 96 | method: 'post', 97 | data: data 98 | }) 99 | } 100 | 101 | export function birthdayDell (data) { 102 | // 删除同步客户生日 103 | return request({ 104 | url: '/ai/Calendar/birthdayDell', 105 | method: 'post', 106 | data: data 107 | }) 108 | } 109 | -------------------------------------------------------------------------------- /src/api/dynamic.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 初始化获取列表 4 | export function init_list (data) { 5 | return request({ 6 | url: '/ai/Dynamic/index', 7 | method: 'get', 8 | params: data 9 | }) 10 | } 11 | 12 | // 点赞 13 | export function click_good (data) { 14 | return request({ 15 | url: '/ai/dynamic/praise', 16 | method: 'get', 17 | params: data 18 | }) 19 | } 20 | 21 | export function to_comment (data) { 22 | return request({ 23 | url: '/ai/comment/save', 24 | method: 'post', 25 | data: data 26 | }) 27 | } 28 | 29 | // 发布 30 | export function to_release (data) { 31 | return request({ 32 | url: '/ai/dynamic/save', 33 | method: 'post', 34 | data: data 35 | }) 36 | } 37 | 38 | //公司详情 39 | export function to_companyDetails (data) { 40 | return request({ 41 | url: '/ai/Dynamic/read', 42 | method: 'get', 43 | params: data 44 | }) 45 | } 46 | 47 | //动态详情 48 | export function dynamic_details (data) { 49 | return request({ 50 | url: '/ai/Dynamic/read', 51 | method: 'get', 52 | params: data 53 | }) 54 | } 55 | 56 | //删除评论 57 | export function del_comment (data) { 58 | return request({ 59 | url: '/ai/Comment/delete', 60 | method: 'post', 61 | data: data 62 | }) 63 | } 64 | 65 | //删除动态 66 | export function del_dynamic (data) { 67 | return request({ 68 | url: '/ai/dynamic/delete', 69 | method: 'post', 70 | data: data 71 | }) 72 | } -------------------------------------------------------------------------------- /src/api/footprint.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 初始化获取时间 4 | export function init_list (data) { 5 | return request({ 6 | url: '/ai/Visit/index', 7 | method: 'get', 8 | params: data 9 | }) 10 | } 11 | 12 | -------------------------------------------------------------------------------- /src/api/form.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function getFormList (listQuery) { 4 | // 表单列表 5 | return request({ 6 | url: '/ai/Form/getlist', 7 | method: 'get', 8 | params: { 9 | page: listQuery.page, 10 | limit: listQuery.limit, 11 | searchKey: listQuery.searchKey, 12 | uid: listQuery.uid 13 | } 14 | }) 15 | } 16 | 17 | export function getMessageFormList (listQuery) { 18 | // 留言列表 19 | return request({ 20 | url: '/ai/Form/msgList', 21 | method: 'get', 22 | params: { 23 | id: listQuery.id, 24 | page: listQuery.page, 25 | limit: listQuery.limit, 26 | uid: listQuery.uid 27 | } 28 | }) 29 | } 30 | 31 | export function getMessageFormDetail (id) { 32 | // 留言表单详情 33 | return request({ 34 | url: '/ai/Form/getMsg?id=' + id, 35 | method: 'get' 36 | }) 37 | } 38 | -------------------------------------------------------------------------------- /src/api/login.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function login (data) { 4 | return request({ 5 | url: '/comm/login', 6 | method: 'post', 7 | data: data 8 | }) 9 | } 10 | 11 | export function getInfo (token) { 12 | return request({ 13 | url: '/user/info', 14 | method: 'get', 15 | params: { token } 16 | }) 17 | } 18 | 19 | export function logout () { 20 | return request({ 21 | url: '/user/logout', 22 | method: 'post' 23 | }) 24 | } 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/api/message.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function get_users (data) { 4 | return request({ 5 | url: '/ai/user/getInfoUser', 6 | method: 'post', 7 | data 8 | }) 9 | } 10 | 11 | //获取消息列表 12 | export function get_list () { 13 | return request({ 14 | url: '/ai/Customerchat/index', 15 | method: 'get', 16 | }) 17 | } 18 | 19 | //已读 20 | export function look (data) { 21 | return request({ 22 | url: '/ai/Customerchat/read', 23 | method: 'get', 24 | params:data 25 | }) 26 | } -------------------------------------------------------------------------------- /src/api/rank.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function getRankList (listQuery) { 4 | let data = { 5 | day: listQuery.day, 6 | page: listQuery.page, 7 | pagesize: listQuery.pagesize 8 | } 9 | // 每日排行 10 | return request({ 11 | url: '/ai/rank', 12 | method: 'POST', 13 | data 14 | }) 15 | } 16 | 17 | export function getRankDetail (eid) { 18 | let data = { 19 | eid: eid 20 | } 21 | // 排行详细 22 | return request({ 23 | url: '/ai/rank/chart', 24 | method: 'POST', 25 | data 26 | }) 27 | } 28 | 29 | export function getMyRank () { 30 | // 用户排名 31 | return request({ 32 | url: '/ai/rank/myrank', 33 | method: 'get' 34 | }) 35 | } 36 | -------------------------------------------------------------------------------- /src/api/talk.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function talkGroup (data) { 4 | // 话术分组 5 | return request({ 6 | url: '/ai/Category/index', 7 | method: 'get', 8 | params: data 9 | }) 10 | } 11 | 12 | export function talkList (data) { 13 | // 话术列表 14 | return request({ 15 | url: '/ai/Verbal/index', 16 | method: 'get', 17 | params: data 18 | }) 19 | } 20 | 21 | export function talkSave (data) { 22 | // 新增话术 23 | return request({ 24 | url: '/ai/Verbal/save', 25 | method: 'post', 26 | data: data 27 | }) 28 | } 29 | 30 | export function talkDelete (data) { 31 | // 删除话术 32 | return request({ 33 | url: '/ai/Verbal/delete', 34 | method: 'post', 35 | data: data 36 | }) 37 | } 38 | 39 | export function talkEdit (data) { 40 | // 编辑话术详情 41 | return request({ 42 | url: '/ai/Verbal/edit', 43 | method: 'get', 44 | params: data 45 | }) 46 | } 47 | 48 | export function talkUpdate (data) { 49 | // 编辑话术详情 50 | return request({ 51 | url: '/ai/Verbal/update', 52 | method: 'post', 53 | data: data 54 | }) 55 | } 56 | -------------------------------------------------------------------------------- /src/api/task.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function addOrEditTask (data) { 4 | // 新增或编辑任务 5 | return request({ 6 | url: '/ai/calendar/save', 7 | method: 'post', 8 | data: data 9 | }) 10 | } 11 | 12 | export function getTaskList (data) { 13 | // 任务列表 14 | return request({ 15 | url: '/ai/calendar/getlist', 16 | method: 'post', 17 | data 18 | }) 19 | } 20 | 21 | export function deleteTask (data) { 22 | // 删除任务 23 | return request({ 24 | url: '/ai/calendar/remove', 25 | method: 'post', 26 | data: data 27 | }) 28 | } 29 | 30 | export function getTaskDetail (id) { 31 | // 任务详情 32 | return request({ 33 | url: '/ai/calendar/getInfo?id=' + id, 34 | method: 'get' 35 | }) 36 | } 37 | 38 | export function getCalendarDays (time) { 39 | // 当月有任务日期数组集合 40 | return request({ 41 | url: '/ai/Calendar/getCalendarDays?month=' + time, 42 | method: 'get' 43 | }) 44 | } 45 | 46 | export function signCompletedTask (listQuery) { 47 | // 完成任务 48 | return request({ 49 | url: '/ai/calendar/finish', 50 | method: 'get', 51 | params: { 52 | id: listQuery.id, 53 | status: listQuery.status 54 | } 55 | }) 56 | } 57 | 58 | export function signStarTask (listQuery) { 59 | // 标星任务 60 | return request({ 61 | url: '/ai/Calendar/star', 62 | method: 'get', 63 | params: { 64 | id: listQuery.id, 65 | star: listQuery.star 66 | } 67 | }) 68 | } 69 | -------------------------------------------------------------------------------- /src/api/upload_file.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function upload_img (fd) { 4 | return request({ 5 | url: '/api/Upload/index', 6 | method: 'post', 7 | data:fd 8 | }) 9 | } 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/api/user_info.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function get_user_info () { 4 | return request({ 5 | url: '/ai/card/read', 6 | method: 'post', 7 | }) 8 | } 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/api/work.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | export function get_list () { 3 | return request({ 4 | url: '/ai/Dc/workList', 5 | method: 'get' 6 | }) 7 | } 8 | 9 | export function save (data) { 10 | 11 | return request({ 12 | url: '/ai/Dc/saveWorkChoose', 13 | method: 'post', 14 | data 15 | }) 16 | } -------------------------------------------------------------------------------- /src/assets/audio/audio.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/audio/audio.mp3 -------------------------------------------------------------------------------- /src/assets/audio/audio.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/audio/audio.ogg -------------------------------------------------------------------------------- /src/assets/audio/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/audio/test.wav -------------------------------------------------------------------------------- /src/assets/card/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/1.png -------------------------------------------------------------------------------- /src/assets/card/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/10.png -------------------------------------------------------------------------------- /src/assets/card/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/11.png -------------------------------------------------------------------------------- /src/assets/card/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/12.png -------------------------------------------------------------------------------- /src/assets/card/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/13.png -------------------------------------------------------------------------------- /src/assets/card/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/14.png -------------------------------------------------------------------------------- /src/assets/card/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/15.png -------------------------------------------------------------------------------- /src/assets/card/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/16.png -------------------------------------------------------------------------------- /src/assets/card/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/17.png -------------------------------------------------------------------------------- /src/assets/card/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/18.png -------------------------------------------------------------------------------- /src/assets/card/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/19.png -------------------------------------------------------------------------------- /src/assets/card/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/2.png -------------------------------------------------------------------------------- /src/assets/card/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/20.png -------------------------------------------------------------------------------- /src/assets/card/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/21.png -------------------------------------------------------------------------------- /src/assets/card/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/3.png -------------------------------------------------------------------------------- /src/assets/card/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/4.png -------------------------------------------------------------------------------- /src/assets/card/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/5.png -------------------------------------------------------------------------------- /src/assets/card/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/6.png -------------------------------------------------------------------------------- /src/assets/card/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/7.png -------------------------------------------------------------------------------- /src/assets/card/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/9.png -------------------------------------------------------------------------------- /src/assets/card/chart1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/chart1.png -------------------------------------------------------------------------------- /src/assets/card/chart2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/chart2.png -------------------------------------------------------------------------------- /src/assets/card/chart3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/chart3.png -------------------------------------------------------------------------------- /src/assets/card/chart4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/chart4.png -------------------------------------------------------------------------------- /src/assets/card/comm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/comm.jpg -------------------------------------------------------------------------------- /src/assets/card/show_audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/show_audio.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/1.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/2.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/3.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/4.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/5.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/6.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/7.png -------------------------------------------------------------------------------- /src/assets/card/thumbnail/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/card/thumbnail/8.png -------------------------------------------------------------------------------- /src/assets/icon/123_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/123_03.png -------------------------------------------------------------------------------- /src/assets/icon/123_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/123_07.png -------------------------------------------------------------------------------- /src/assets/icon/123_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/123_09.png -------------------------------------------------------------------------------- /src/assets/icon/33_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/33_03.png -------------------------------------------------------------------------------- /src/assets/icon/33_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/33_06.png -------------------------------------------------------------------------------- /src/assets/icon/33_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/33_08.png -------------------------------------------------------------------------------- /src/assets/icon/PingLun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/PingLun.jpg -------------------------------------------------------------------------------- /src/assets/icon/QR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/QR.png -------------------------------------------------------------------------------- /src/assets/icon/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/add.png -------------------------------------------------------------------------------- /src/assets/icon/audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/audio.png -------------------------------------------------------------------------------- /src/assets/icon/bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/bar.png -------------------------------------------------------------------------------- /src/assets/icon/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/calendar.png -------------------------------------------------------------------------------- /src/assets/icon/calendar_rank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/calendar_rank.png -------------------------------------------------------------------------------- /src/assets/icon/card_edit_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/card_edit_03.jpg -------------------------------------------------------------------------------- /src/assets/icon/card_edit_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/card_edit_06.jpg -------------------------------------------------------------------------------- /src/assets/icon/card_edit_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/card_edit_08.jpg -------------------------------------------------------------------------------- /src/assets/icon/card_edit_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/card_edit_10.jpg -------------------------------------------------------------------------------- /src/assets/icon/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/comment.png -------------------------------------------------------------------------------- /src/assets/icon/contact.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/contact.png -------------------------------------------------------------------------------- /src/assets/icon/contact2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/contact2.png -------------------------------------------------------------------------------- /src/assets/icon/del_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/del_icon.png -------------------------------------------------------------------------------- /src/assets/icon/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/edit.png -------------------------------------------------------------------------------- /src/assets/icon/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/error.png -------------------------------------------------------------------------------- /src/assets/icon/error1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/error1.png -------------------------------------------------------------------------------- /src/assets/icon/face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/face.png -------------------------------------------------------------------------------- /src/assets/icon/fork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/fork.png -------------------------------------------------------------------------------- /src/assets/icon/index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/index.png -------------------------------------------------------------------------------- /src/assets/icon/index2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/index2.png -------------------------------------------------------------------------------- /src/assets/icon/jia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/jia.png -------------------------------------------------------------------------------- /src/assets/icon/liao_diannao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/liao_diannao.png -------------------------------------------------------------------------------- /src/assets/icon/liao_dong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/liao_dong.png -------------------------------------------------------------------------------- /src/assets/icon/liao_quan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/liao_quan.png -------------------------------------------------------------------------------- /src/assets/icon/liao_ren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/liao_ren.png -------------------------------------------------------------------------------- /src/assets/icon/loading_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/loading_1.png -------------------------------------------------------------------------------- /src/assets/icon/loading_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/loading_2.png -------------------------------------------------------------------------------- /src/assets/icon/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/message.png -------------------------------------------------------------------------------- /src/assets/icon/message2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/message2.png -------------------------------------------------------------------------------- /src/assets/icon/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/more.png -------------------------------------------------------------------------------- /src/assets/icon/my_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/my_03.png -------------------------------------------------------------------------------- /src/assets/icon/my_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/my_06.png -------------------------------------------------------------------------------- /src/assets/icon/my_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/my_11.png -------------------------------------------------------------------------------- /src/assets/icon/my_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/my_14.png -------------------------------------------------------------------------------- /src/assets/icon/my_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/my_16.png -------------------------------------------------------------------------------- /src/assets/icon/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/network.png -------------------------------------------------------------------------------- /src/assets/icon/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/news.png -------------------------------------------------------------------------------- /src/assets/icon/news2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/news2.png -------------------------------------------------------------------------------- /src/assets/icon/none_icon_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/none_icon_03.png -------------------------------------------------------------------------------- /src/assets/icon/none_icon_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/none_icon_05.png -------------------------------------------------------------------------------- /src/assets/icon/none_icon_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/none_icon_08.png -------------------------------------------------------------------------------- /src/assets/icon/none_icon_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/none_icon_11.png -------------------------------------------------------------------------------- /src/assets/icon/none_icon_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/none_icon_14.png -------------------------------------------------------------------------------- /src/assets/icon/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/phone.png -------------------------------------------------------------------------------- /src/assets/icon/select_icon_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/select_icon_03.png -------------------------------------------------------------------------------- /src/assets/icon/select_icon_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/select_icon_05.png -------------------------------------------------------------------------------- /src/assets/icon/select_icon_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/select_icon_08.png -------------------------------------------------------------------------------- /src/assets/icon/select_icon_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/select_icon_11.png -------------------------------------------------------------------------------- /src/assets/icon/select_icon_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/select_icon_14.png -------------------------------------------------------------------------------- /src/assets/icon/self.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/self.png -------------------------------------------------------------------------------- /src/assets/icon/self2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/self2.png -------------------------------------------------------------------------------- /src/assets/icon/service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/service.png -------------------------------------------------------------------------------- /src/assets/icon/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/top.png -------------------------------------------------------------------------------- /src/assets/icon/top1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/top1.png -------------------------------------------------------------------------------- /src/assets/icon/top2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/top2.png -------------------------------------------------------------------------------- /src/assets/icon/top3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/top3.png -------------------------------------------------------------------------------- /src/assets/icon/w1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w1.jpg -------------------------------------------------------------------------------- /src/assets/icon/w2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w2.jpg -------------------------------------------------------------------------------- /src/assets/icon/w3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w3.jpg -------------------------------------------------------------------------------- /src/assets/icon/w4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w4.jpg -------------------------------------------------------------------------------- /src/assets/icon/w5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w5.jpg -------------------------------------------------------------------------------- /src/assets/icon/w6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w6.jpg -------------------------------------------------------------------------------- /src/assets/icon/w7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w7.jpg -------------------------------------------------------------------------------- /src/assets/icon/w_s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/w_s.jpg -------------------------------------------------------------------------------- /src/assets/icon/wchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/wchat.png -------------------------------------------------------------------------------- /src/assets/icon/xiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/xiao.png -------------------------------------------------------------------------------- /src/assets/icon/保存号码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/保存号码.png -------------------------------------------------------------------------------- /src/assets/icon/动态点赞.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/动态点赞.png -------------------------------------------------------------------------------- /src/assets/icon/复制公司名称.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/复制公司名称.png -------------------------------------------------------------------------------- /src/assets/icon/复制邮箱.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/复制邮箱.png -------------------------------------------------------------------------------- /src/assets/icon/拨打座机.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/拨打座机.png -------------------------------------------------------------------------------- /src/assets/icon/查看动态.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/查看动态.png -------------------------------------------------------------------------------- /src/assets/icon/标题点赞.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/icon/标题点赞.png -------------------------------------------------------------------------------- /src/assets/img/assign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/assign.png -------------------------------------------------------------------------------- /src/assets/img/back_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/back_btn.png -------------------------------------------------------------------------------- /src/assets/img/back_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/back_img.png -------------------------------------------------------------------------------- /src/assets/img/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/calendar.png -------------------------------------------------------------------------------- /src/assets/img/calendar1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/calendar1.png -------------------------------------------------------------------------------- /src/assets/img/calendar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/calendar2.png -------------------------------------------------------------------------------- /src/assets/img/calendar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/calendar3.png -------------------------------------------------------------------------------- /src/assets/img/calendar4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/calendar4.png -------------------------------------------------------------------------------- /src/assets/img/calendar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/calendar5.png -------------------------------------------------------------------------------- /src/assets/img/card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/card.png -------------------------------------------------------------------------------- /src/assets/img/card2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/card2.png -------------------------------------------------------------------------------- /src/assets/img/chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/chart.png -------------------------------------------------------------------------------- /src/assets/img/chart1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/chart1.png -------------------------------------------------------------------------------- /src/assets/img/chart2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/chart2.png -------------------------------------------------------------------------------- /src/assets/img/chart3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/chart3.png -------------------------------------------------------------------------------- /src/assets/img/chart4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/chart4.png -------------------------------------------------------------------------------- /src/assets/img/chatBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/chatBg.png -------------------------------------------------------------------------------- /src/assets/img/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/code.png -------------------------------------------------------------------------------- /src/assets/img/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/comment.png -------------------------------------------------------------------------------- /src/assets/img/comment02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/comment02.png -------------------------------------------------------------------------------- /src/assets/img/comment2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/comment2.png -------------------------------------------------------------------------------- /src/assets/img/datapicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/datapicker.png -------------------------------------------------------------------------------- /src/assets/img/datepickerGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/datepickerGray.png -------------------------------------------------------------------------------- /src/assets/img/detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/detail.png -------------------------------------------------------------------------------- /src/assets/img/edit-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/edit-icon.png -------------------------------------------------------------------------------- /src/assets/img/follow-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/follow-icon.png -------------------------------------------------------------------------------- /src/assets/img/form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/form.png -------------------------------------------------------------------------------- /src/assets/img/heart-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/heart-black.png -------------------------------------------------------------------------------- /src/assets/img/heart-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/heart-blue.png -------------------------------------------------------------------------------- /src/assets/img/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/heart.png -------------------------------------------------------------------------------- /src/assets/img/heart_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/heart_s.png -------------------------------------------------------------------------------- /src/assets/img/inter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/inter.png -------------------------------------------------------------------------------- /src/assets/img/l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/l.gif -------------------------------------------------------------------------------- /src/assets/img/list_pic_moren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/list_pic_moren.png -------------------------------------------------------------------------------- /src/assets/img/message-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/message-icon.png -------------------------------------------------------------------------------- /src/assets/img/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/message.png -------------------------------------------------------------------------------- /src/assets/img/message2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/message2.png -------------------------------------------------------------------------------- /src/assets/img/moren.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/moren.jpg -------------------------------------------------------------------------------- /src/assets/img/my-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/my-icon.png -------------------------------------------------------------------------------- /src/assets/img/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/news.png -------------------------------------------------------------------------------- /src/assets/img/p_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/p_icon.jpg -------------------------------------------------------------------------------- /src/assets/img/product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/product.png -------------------------------------------------------------------------------- /src/assets/img/r_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/r_banner.png -------------------------------------------------------------------------------- /src/assets/img/selfCard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/selfCard.png -------------------------------------------------------------------------------- /src/assets/img/set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/set.png -------------------------------------------------------------------------------- /src/assets/img/six.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/six.png -------------------------------------------------------------------------------- /src/assets/img/sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/sort.png -------------------------------------------------------------------------------- /src/assets/img/tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/tabbar.png -------------------------------------------------------------------------------- /src/assets/img/task-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/task-icon.png -------------------------------------------------------------------------------- /src/assets/img/task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/task.png -------------------------------------------------------------------------------- /src/assets/img/trueland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/trueland.png -------------------------------------------------------------------------------- /src/assets/img/u112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/u112.png -------------------------------------------------------------------------------- /src/assets/img/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/warning.png -------------------------------------------------------------------------------- /src/assets/img/wchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/wchat.png -------------------------------------------------------------------------------- /src/assets/img/weixin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/img/weixin.png -------------------------------------------------------------------------------- /src/assets/nav/address1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/address1.png -------------------------------------------------------------------------------- /src/assets/nav/address3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/address3.png -------------------------------------------------------------------------------- /src/assets/nav/address4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/address4.png -------------------------------------------------------------------------------- /src/assets/nav/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/calendar.png -------------------------------------------------------------------------------- /src/assets/nav/card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/card.png -------------------------------------------------------------------------------- /src/assets/nav/cellphone1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/cellphone1.png -------------------------------------------------------------------------------- /src/assets/nav/chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/chat.png -------------------------------------------------------------------------------- /src/assets/nav/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/email.png -------------------------------------------------------------------------------- /src/assets/nav/email2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/email2.png -------------------------------------------------------------------------------- /src/assets/nav/email3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/email3.png -------------------------------------------------------------------------------- /src/assets/nav/email4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/email4.png -------------------------------------------------------------------------------- /src/assets/nav/hi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/hi.png -------------------------------------------------------------------------------- /src/assets/nav/manage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/manage.png -------------------------------------------------------------------------------- /src/assets/nav/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/map.png -------------------------------------------------------------------------------- /src/assets/nav/map2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/map2.png -------------------------------------------------------------------------------- /src/assets/nav/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/news.png -------------------------------------------------------------------------------- /src/assets/nav/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/phone.png -------------------------------------------------------------------------------- /src/assets/nav/phone2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/phone2.png -------------------------------------------------------------------------------- /src/assets/nav/phone3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/phone3.png -------------------------------------------------------------------------------- /src/assets/nav/phone4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/phone4.png -------------------------------------------------------------------------------- /src/assets/nav/report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/report.png -------------------------------------------------------------------------------- /src/assets/nav/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/setting.png -------------------------------------------------------------------------------- /src/assets/nav/step.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/nav/step.png -------------------------------------------------------------------------------- /src/assets/task/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/calendar.png -------------------------------------------------------------------------------- /src/assets/task/calendar_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/calendar_icon.png -------------------------------------------------------------------------------- /src/assets/task/demo_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/demo_img.png -------------------------------------------------------------------------------- /src/assets/task/empty_task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/empty_task.png -------------------------------------------------------------------------------- /src/assets/task/mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/mark.png -------------------------------------------------------------------------------- /src/assets/task/selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/selected.png -------------------------------------------------------------------------------- /src/assets/task/selected_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/selected_star.png -------------------------------------------------------------------------------- /src/assets/task/unmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/unmark.png -------------------------------------------------------------------------------- /src/assets/task/unselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/src/assets/task/unselected.png -------------------------------------------------------------------------------- /src/components/footer/index.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-08-28 10:22:54 4 | * @Last Modified by: Jessica 5 | * @Last Modified time: 2018-10-17 19:00:57 6 | */ 7 | 40 | 41 | 110 | 111 | 127 | -------------------------------------------------------------------------------- /src/error.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: zhangmengli 3 | * @Date: 2018-10-10 10:20:21 4 | * @Last Modified by: zhangmengli 5 | * @Last Modified time: 2018-10-10 10:20:21 6 | */ 7 | 15 | 16 | 58 | 59 | 84 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import store from './store' 7 | 8 | import '@/utils/rem.js' 9 | import '@/styles/index.scss' // 全局样式 10 | import '../static/css/face.css' 11 | import '../static/css/base.css' 12 | import './permission.js' 13 | 14 | import Global from '@/utils/global' 15 | import { 16 | ToastPlugin, 17 | LoadingPlugin, 18 | WechatPlugin, 19 | ConfirmPlugin, 20 | AlertPlugin 21 | } from 'vux' 22 | 23 | import { 24 | wxConfig 25 | } from '@/api/card' 26 | import Vconsole from 'vconsole' 27 | if (process.env.NODE_ENV != 'development') { 28 | var vConsole = new Vconsole() 29 | } 30 | 31 | //var vConsole = new Vconsole() 32 | Vue.use(LoadingPlugin) 33 | Vue.use(ToastPlugin) 34 | Vue.use(WechatPlugin) 35 | Vue.use(ConfirmPlugin) 36 | Vue.use(AlertPlugin) 37 | 38 | wxConfig(location.href.split('#')[0]) 39 | .then(res => { 40 | const config = res.data 41 | config.beta = true 42 | config.debug = false 43 | config.jsApiList = ['startRecord', 'stopRecord', 'onVoiceRecordEnd', 'uploadVoice', 'downloadVoice', 'playVoice', 'pauseVoice', 'stopVoice', 'onVoicePlayEnd'] 44 | Vue.wechat.config(config) 45 | }) 46 | .catch(error => { 47 | console.log(error) 48 | }) 49 | // 全局方法集 50 | 51 | Vue.prototype.Global = new Global(Vue) 52 | 53 | Vue.config.productionTip = false 54 | 55 | /* eslint-disable no-new */ 56 | new Vue({ 57 | el: '#app', 58 | router, 59 | store, 60 | components: { 61 | App 62 | }, 63 | template: '' 64 | }) 65 | -------------------------------------------------------------------------------- /src/permission.js: -------------------------------------------------------------------------------- 1 | import router from './router' 2 | router.beforeEach((to, from, next) => { 3 | window.document.title = to.meta.title 4 | next() 5 | }) 6 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import app from './modules/app' 4 | import user from './modules/user' 5 | import err from './modules/err' 6 | import chat from './modules/chat' 7 | import message from './modules/message' 8 | import work from './modules/work' 9 | import tab from './modules/tab' 10 | 11 | Vue.use(Vuex) 12 | 13 | const store = new Vuex.Store({ 14 | modules: { 15 | app, 16 | user, 17 | err, 18 | chat, 19 | message, 20 | work, 21 | tab 22 | } 23 | }) 24 | 25 | export default store 26 | -------------------------------------------------------------------------------- /src/store/modules/app.js: -------------------------------------------------------------------------------- 1 | 2 | const app = { 3 | namespaced: true, 4 | state: { 5 | device: 'desktop', 6 | Unread:0, 7 | global_dialog:false 8 | }, 9 | mutations: { 10 | //未读消息 11 | ADD_Unread:(state) => { 12 | state.Unread ++ 13 | }, 14 | 15 | Empty:(state) => { 16 | state.Unread = 0; 17 | }, 18 | 19 | //打开蒙层 20 | open_global_dialog:(state) => { 21 | state.global_dialog = true; 22 | }, 23 | 24 | //关闭蒙层 25 | close_global_dialog:(state) => { 26 | state.global_dialog = false; 27 | }, 28 | 29 | 30 | }, 31 | actions: { 32 | ToggleSideBar: ({ commit }) => { 33 | commit('TOGGLE_SIDEBAR') 34 | }, 35 | CloseSideBar ({ commit }, { withoutAnimation }) { 36 | commit('CLOSE_SIDEBAR', withoutAnimation) 37 | }, 38 | ToggleDevice ({ commit }, device) { 39 | commit('TOGGLE_DEVICE', device) 40 | } 41 | } 42 | } 43 | 44 | export default app 45 | -------------------------------------------------------------------------------- /src/store/modules/chat.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import {dateFtt, all_srcollBtoom} from '../../utils/base' 3 | import {emojiAnalysis} from '../../utils/emoj' 4 | const chat = { 5 | namespaced: true, 6 | state: { 7 | char_list: [], 8 | img_list: [], 9 | my_chat_room_id: '' 10 | 11 | }, 12 | mutations: { 13 | SET_my_chat_room_id: (state, id) => { 14 | state.my_chat_room_id = id 15 | }, 16 | 17 | HIDE_loading: (state, id) => { 18 | for (let i = 0; i < state.char_list.length; i++) { 19 | if (state.char_list[i].id === id) { 20 | state.char_list[i].is_loading = false 21 | break 22 | } 23 | } 24 | }, 25 | PUSH_char_list: (state, data) => { 26 | state.char_list.push(data) 27 | }, 28 | 29 | PUSH_img_list: (state, data) => { 30 | state.img_list.push(data) 31 | }, 32 | 33 | Clear_char_list: (state, data) => { 34 | state.char_list = [] 35 | }, 36 | 37 | Clear_img_list: (state, data) => { 38 | state.img_list = [] 39 | } 40 | 41 | }, 42 | actions: { 43 | GetChat (store, id) { 44 | const { commit, dispatch, state, rootState } = store 45 | if (id && rootState.user.websocketConnection != null) { 46 | const req = { 47 | 'cmd': 'GetChat', 48 | 'content': id// 对方的id 49 | } 50 | rootState.user.websocketConnection.send(JSON.stringify(req)) 51 | // this.chat_record(); 52 | } 53 | }, 54 | 55 | chat_record (store, {id, vm, wx_name}) { 56 | const { commit, dispatch, state, rootState } = store 57 | commit('Clear_char_list') 58 | commit('Clear_img_list') 59 | const that = this 60 | const user = rootState.user.info 61 | 62 | if (!user.message_id) { 63 | alert('没有聊天对象id,无法获取聊天记录') 64 | return 65 | } 66 | 67 | const data = { 68 | userId: user.message_id, // 当前操作者的id 69 | aimId: id, // 对方的id 70 | token: rootState.user.my_chat_token 71 | } 72 | 73 | vm.$vux.loading.show({ 74 | text: '加载中...' 75 | }) 76 | 77 | axios({ 78 | method: 'POST', 79 | url: `${rootState.user.chat_domain}/chatapi/getChat`, 80 | data: JSON.stringify(data) 81 | }).then((res) => { 82 | vm.$vux.loading.hide() 83 | if (res.status === 200 && res.data && res.data.message) { 84 | const list = JSON.parse(res.data.message) 85 | let others_image = user.image// h5所有者的头像 86 | list.map((val, i) => { 87 | try { 88 | const time = dateFtt('yyyy-MM-dd hh:mm:ss', new Date(val.createtime)) 89 | let data = JSON.parse(val.content) 90 | let obj = {} 91 | obj.fead_src = val.speaker == user.message_id ? others_image : '' 92 | obj.from = val.speaker == user.message_id ? 'me' : 'others' 93 | obj.time = time 94 | if (data.type === 'text') { 95 | obj.type = 'text' 96 | obj.content = emojiAnalysis([data.content]) 97 | commit('PUSH_char_list', obj) 98 | } else if (data.type === 'img') { 99 | obj.type = 'img' 100 | 101 | if (data.content.indexOf('wxfile') > -1 || data.content.indexOf('blob:http') > -1) { 102 | obj.content = data.original 103 | } else { 104 | obj.content = data.content 105 | } 106 | 107 | obj.original = data.original 108 | commit('PUSH_char_list', obj) 109 | commit('PUSH_img_list', { 110 | src: data.original 111 | }) 112 | } else if (data.type === 'shop') { 113 | const shop_obj = { 114 | type: 'shop', 115 | p_class: data.p_class, 116 | p_id: data.p_id, 117 | p_image: data.p_image, 118 | p_name: data.p_name, 119 | p_price_sell: data.p_price_sell, 120 | p_title: data.p_title, 121 | content: '' 122 | } 123 | 124 | Object.assign(obj, shop_obj) 125 | commit('PUSH_char_list', obj) 126 | } 127 | } catch (err) {} 128 | }) 129 | all_srcollBtoom(vm) 130 | } 131 | }).catch((err) => { 132 | vm.$vux.loading.hide() 133 | }) 134 | } 135 | 136 | } 137 | } 138 | 139 | export default chat 140 | -------------------------------------------------------------------------------- /src/store/modules/err.js: -------------------------------------------------------------------------------- 1 | 2 | const err = { 3 | namespaced: true, 4 | state: { 5 | 6 | }, 7 | mutations: { 8 | Handling_errors: (state, err) => { 9 | alert('网络错误,请重新处理!'); 10 | }, 11 | }, 12 | actions: { 13 | 14 | } 15 | } 16 | 17 | export default err 18 | -------------------------------------------------------------------------------- /src/store/modules/message.js: -------------------------------------------------------------------------------- 1 | 2 | const message = { 3 | namespaced: true, 4 | state: { 5 | messageList:[] 6 | }, 7 | mutations: { 8 | SET_messageList: (state, data) => { 9 | state.messageList = data 10 | }, 11 | PUSH_messageList:(state, data) => { 12 | state.messageList.push(data); 13 | }, 14 | Unshift_messageList:(state, data)=>{ 15 | state.messageList.unshift(data); 16 | }, 17 | }, 18 | actions: { 19 | 20 | 21 | } 22 | } 23 | 24 | export default message 25 | -------------------------------------------------------------------------------- /src/store/modules/tab.js: -------------------------------------------------------------------------------- 1 | 2 | const tab = { 3 | namespaced: true, 4 | state: { 5 | tabIndex:0,//天眼页面选择-时间-行为-个人 6 | active:0,//客户详情页面tab 7 | option:'成交率',//通讯录的 8 | 9 | 10 | }, 11 | mutations: { 12 | //首页tab切换 13 | index_change_tab:(state, data) => { 14 | state.tabIndex = data; 15 | }, 16 | //客户详情页面tab切换 17 | client_change_active:(state, data) => { 18 | state.active = data; 19 | }, 20 | 21 | }, 22 | actions: { 23 | 24 | } 25 | } 26 | 27 | export default tab 28 | -------------------------------------------------------------------------------- /src/store/modules/user.js: -------------------------------------------------------------------------------- 1 | // import { login, logout, getInfo } from '@/api/login' 2 | import { getToken } from '@/utils/auth' 3 | 4 | const user = { 5 | namespaced: true, 6 | state: { 7 | token: getToken(), 8 | info: {}, 9 | websocketConnection: null, // 用的全局聊天对象 10 | my_chat_token: '', // 用于请求聊天服务器接口的凭证 11 | my_chat_room_id: '', // 使用者当前的回话id 12 | // chat_domain:'http://192.168.40.176:8080', 13 | // chat_ws: 'ws://192.168.40.176:3838', 14 | chat_domain: 'https://chattyun.71360.com', 15 | chat_ws: 'wss://chattyun.71360.com/wss', 16 | // cardInfor: null 17 | cardInfor: { 18 | close: true, 19 | phone: '', 20 | tel: '', 21 | wechat: '', 22 | email: '', 23 | company: '', 24 | address: '', 25 | goods_case: { 26 | case: [], 27 | goods: [] 28 | } 29 | } // 名片详情 30 | 31 | }, 32 | 33 | mutations: { 34 | SET_TOKEN: (state, token) => { 35 | state.token = token 36 | }, 37 | 38 | // 设置用户信息 39 | SET_INFO: (state, data) => { 40 | state.info = data 41 | }, 42 | 43 | // 设置聊天对象 44 | SET_websocket: (state, data) => { 45 | state.websocketConnection = data 46 | }, 47 | 48 | // 用于请求聊天服务器接口的凭证 49 | SET_my_chat_token: (state, token) => { 50 | state.my_chat_token = token 51 | }, 52 | 53 | // 用于请求聊天服务器接口的凭证 54 | SET_my_chat_room_id: (state, id) => { 55 | state.my_chat_room_id = id 56 | }, 57 | 58 | // 设置message_id 59 | SET_my_message_id: (state, id) => { 60 | state.info.message_id = id 61 | } 62 | 63 | }, 64 | 65 | actions: { 66 | // 登录 67 | // Login({ commit }, userInfo) { 68 | // return new Promise((resolve, reject) => { 69 | // setToken('admin') 70 | // commit('SET_TOKEN', 'admin') 71 | // resolve() 72 | // }) 73 | // }, 74 | 75 | // 前端 登出 76 | // FedLogOut({ commit }) { 77 | // return new Promise(resolve => { 78 | // commit('SET_TOKEN', '') 79 | // removeToken() 80 | // resolve() 81 | // }) 82 | // } 83 | } 84 | } 85 | 86 | export default user 87 | -------------------------------------------------------------------------------- /src/store/modules/work.js: -------------------------------------------------------------------------------- 1 | 2 | const work = { 3 | namespaced: true, 4 | state: { 5 | active_customers: false, // 活跃客户 6 | add_customers: true, // 新增客户 7 | card_browsing: true, // 名片浏览 8 | forward_num: true, // 转发次数 9 | save_num: true, // 保存次数 10 | in_form: true // 参与表单 11 | 12 | }, 13 | mutations: { 14 | 15 | }, 16 | actions: { 17 | 18 | } 19 | } 20 | 21 | export default work 22 | -------------------------------------------------------------------------------- /src/styles/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('//at.alicdn.com/t/font_830990_u6t2v9bdfyr.eot?t=1537956678510'); /* IE9*/ 4 | src: url('//at.alicdn.com/t/font_830990_u6t2v9bdfyr.eot?t=1537956678510#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAX8AAsAAAAACJAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8hkhiY21hcAAAAYAAAABcAAABnLNeGoNnbHlmAAAB3AAAAhQAAAJMBPBL8mhlYWQAAAPwAAAAMQAAADYUBTx5aGhlYQAABCQAAAAgAAAAJAkiBNhobXR4AAAERAAAABAAAAAQEYH/72xvY2EAAARUAAAACgAAAAoBrADkbWF4cAAABGAAAAAeAAAAIAESAF9uYW1lAAAEgAAAAUUAAAJtPlT+fXBvc3QAAAXIAAAANAAAAEWthDHleJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkSWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMTwTYG7438AQw9zAMAEozAiSAwD+BQxjeJztkLENgDAMBM84oAihKINQIgaiYvKsEWyHgiF46yz/6ysDM6DGbiSQG8F1WSqRK2vkidN8tpmg0UqrvX+vkEQjx6XelIVfW+zjdepfG/iPWxlEXgdMD4xUEaJ4nDVRz08TURB+39vtLttf+7DtLi6kzba4L4XYpLR0w2WxJha7Bg9iMNBopMDFxLTxgBcTSUAPxhOePHBROXAiseGkiXo0Gg94NBzk1pP/AN36inKZfDPzTeab+YjU/9Nvy5CeEpOUyS1CkIbrwTQUVRnnDj3HRsJR1DjMNErpQTSThmlURJcXJJEKwr90uuLwAtTsf7JbMfCytm3nl+8tV0tu8PXjYauUb93008XRxjekWRxMS8Cay/MxWdHYBItRDBUX17/7s2HQGJvUNTU609448mCEdTA9g9outLml0WLGn29Nlh52PsB1y9Wlu428vY31wdAE0xR5jOfnLCQ0hjgTqtcXp+wbuzVkdAY9bMA72mjPRJWwPjEsVoZnCSESIf1NuSBtksjZN8ilCnEL4HGoBpE8uOJsgQuAiOeYi7pzRpFdY1zQqZpAKhl6/+x5R04i9Zqu+PUmpc26v4I9lmZvHslDJ8fHvxXcfzVmP3kBHat777AWp2+zQ6j92jqQpIOtk+Aztfwm0BTToKvBjyRnkXLCvCLTaupCMWbno7Vra9cp9Zv1OiHyQHvottBOyTBJEluoH9aEmSV7quJWpqFyJC9Cg3BGSWkoC5dyoYXg6ulj5nF5wfFYpNfd2el18Sn44syyCN2n+xHmOQ/o5aAb+Fnu5EYszDcaQceih72fMCjhOdMK7mDfGsly8hen6nTbeJxjYGRgYADiGzIlD+P5bb4ycLMwgMD1izVuMPr/+/8FrCHMDUAuBwMTSBQAZAgNEQAAAHicY2BkYGBu+N/AEMMa8v/9//+sIQxAERTAAgCt3gcDBAAAAAQA/+8ELQAABVQAAAAAAAAAhgDkASYAAHicY2BkYGBgYQgGYhBgAmIuIGRg+A/mMwAAES0BcgAAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicY2BigAAuBuyAhZGJkZmRhZGVgSMlMzEvozTRkD0lMy+9PDWTzTU3MTPHkIEBAHrWCEM=') format('woff'), 6 | url('//at.alicdn.com/t/font_830990_u6t2v9bdfyr.ttf?t=1537956678510') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('//at.alicdn.com/t/font_830990_u6t2v9bdfyr.svg?t=1537956678510#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-dianhua1:before { content: "\e600"; } 19 | 20 | .icon-dingwei:before { content: "\e610"; } 21 | 22 | .icon-Email1:before { content: "\e60e"; } 23 | -------------------------------------------------------------------------------- /src/styles/index.scss: -------------------------------------------------------------------------------- 1 | @import './reset.scss'; 2 | @import './vux.scss'; 3 | @import './card.scss'; 4 | @import './iconfont.css'; 5 | 6 | .fr { 7 | float: right; 8 | } 9 | 10 | .fl { 11 | float: left; 12 | } 13 | .tar{ 14 | text-align: right; 15 | } 16 | .tac{ 17 | text-align: center; 18 | } 19 | i,em{ 20 | font-style: normal; 21 | } 22 | li,ol{ 23 | list-style: none; 24 | } 25 | .mt-10{ 26 | margin-top: 0.1rem; 27 | } 28 | .mt-20{ 29 | margin-top: 0.2rem; 30 | } 31 | .ml-10{ 32 | margin-left: 0.1rem; 33 | } 34 | .ml-20{ 35 | margin-left: 0.2rem; 36 | } 37 | .page{ 38 | text-align: center; 39 | margin-top: 0.2rem; 40 | } 41 | .app-main{ 42 | height: 100%; 43 | padding-bottom: 55px; 44 | } 45 | .card-shadow{ 46 | border-radius: 0.1rem; 47 | border-bottom: 1px #e2e2e2 solid; 48 | } 49 | .btn-primary{ 50 | height: 0.8rem; 51 | background-color: #5977fe; 52 | border-radius: 0.8rem; 53 | width: 2.4rem; 54 | border: none; 55 | outline: none; 56 | color: #fff; 57 | font-size: 0.36rem; 58 | margin-left: 0.3rem; 59 | } 60 | .btn-cancle{ 61 | width: 2.4rem; 62 | height: 0.8rem; 63 | background-color: #a0a6ae; 64 | border-radius: 0.8rem; 65 | border: none; 66 | outline: none; 67 | color: #fff; 68 | font-size: 0.36rem; 69 | } 70 | .contact .vux-tab-ink-bar{ 71 | background: transparent; 72 | } 73 | .contact .vux-tab-ink-bar::after{ 74 | content: ''; 75 | display: block; 76 | height: 2px; 77 | background: #3e84ff; 78 | width: 1.25rem; 79 | margin: 0 auto; 80 | } 81 | .contact .vux-tab .vux-tab-item.vux-tab-selected{ 82 | color:#3e84ff; 83 | } 84 | .contact .vux-tab .vux-tab-item{ 85 | background: transparent; 86 | } 87 | .blue{ 88 | color: #4672b3; 89 | } 90 | -------------------------------------------------------------------------------- /src/styles/reset.scss: -------------------------------------------------------------------------------- 1 | body { 2 | height: 100%; 3 | -moz-osx-font-smoothing: grayscale; 4 | -webkit-font-smoothing: antialiased; 5 | text-rendering: optimizeLegibility; 6 | font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; 7 | color: #333; 8 | font-size: 0.28rem; 9 | background-color: #fff; 10 | } 11 | 12 | label { 13 | font-weight: 700; 14 | } 15 | 16 | html { 17 | height: 100%; 18 | box-sizing: border-box; 19 | } 20 | 21 | #app{ 22 | height: 100%; 23 | } 24 | 25 | *, 26 | *:before, 27 | *:after { 28 | box-sizing: border-box; 29 | padding: 0; 30 | margin: 0; 31 | } 32 | 33 | a, 34 | a:focus, 35 | a:hover { 36 | cursor: pointer; 37 | color: inherit; 38 | outline: none; 39 | text-decoration: none; 40 | } 41 | 42 | div:focus{ 43 | outline: none; 44 | } 45 | 46 | a:focus, 47 | a:active { 48 | outline: none; 49 | } 50 | 51 | a, 52 | a:focus, 53 | a:hover { 54 | cursor: pointer; 55 | color: inherit; 56 | text-decoration: none; 57 | } 58 | 59 | .clearfix { 60 | &:after { 61 | visibility: hidden; 62 | display: block; 63 | font-size: 0; 64 | content: " "; 65 | clear: both; 66 | height: 0; 67 | } 68 | } -------------------------------------------------------------------------------- /src/styles/vux.scss: -------------------------------------------------------------------------------- 1 | .vux-popup-header-right{ 2 | color: #5977fe !important; 3 | } 4 | .vux-popup-picker-select-box{ 5 | color: #717171; 6 | } 7 | .weui-cell_access .weui-cell__ft:after{ 8 | width: 0.2rem !important; 9 | height: 0.2rem !important; 10 | } 11 | .xs-plugin-pullup-container{ 12 | bottom: -55px !important; 13 | } 14 | .weui-cells_radio{ 15 | .vux-radio-label{ 16 | font-weight: normal; 17 | } 18 | } 19 | /*日历组件增加年月日时分*/ 20 | .dp-content{ 21 | [data-role='year']{ 22 | .scroller-item:after{ 23 | content: '年'; 24 | } 25 | } 26 | [data-role='month']{ 27 | .scroller-item:after{ 28 | content: '月'; 29 | } 30 | } 31 | [data-role='day']{ 32 | .scroller-item:after{ 33 | content: '日'; 34 | } 35 | } 36 | [data-role='hour']{ 37 | .scroller-item:after{ 38 | content: '时'; 39 | } 40 | } 41 | [data-role='minute']{ 42 | .scroller-item:after{ 43 | content: '分'; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/styles/vux_theme.less: -------------------------------------------------------------------------------- 1 | @tabbar-text-active-color: #5977fe; 2 | @tab-text-active-color: #5977fe; 3 | @tab-bar-active-color: #5977fe; 4 | @button-global-border-radius: 99px; 5 | @button-global-height: 40px; 6 | @button-primary-bg-color: #5977fe; 7 | @button-primary-active-bg-color: #5977fe; 8 | @dialog-gap-width: 0; 9 | @dialog-width: 100%; 10 | @datetime-header-item-font-color: #5977fe; 11 | @swiper-indicator-active-color:#5977fe; 12 | @popover-bg-color: #535353; 13 | @timeline-item-bg-color: #5977fe; -------------------------------------------------------------------------------- /src/utils/auth.js: -------------------------------------------------------------------------------- 1 | import Cookies from 'js-cookie' 2 | 3 | const TokenKey = 'token' 4 | 5 | export function getToken () { 6 | return Cookies.get(TokenKey) 7 | } 8 | 9 | export function setToken (token) { 10 | return Cookies.set(TokenKey, token) 11 | } 12 | 13 | export function removeToken () { 14 | return Cookies.remove(TokenKey) 15 | } 16 | 17 | export function getCookie (name) { 18 | return Cookies.get(name) 19 | } 20 | 21 | export function setCookie (name, token) { 22 | return Cookies.set(name, token) 23 | } 24 | 25 | export function removeCookie (name) { 26 | return Cookies.remove(name) 27 | } 28 | -------------------------------------------------------------------------------- /src/utils/card_template.js: -------------------------------------------------------------------------------- 1 | // 所有名片模板 2 | // 珍岛的模板 3 | let zhendaoList = [] 4 | let companyList = ['上海', '无锡', '苏州', '宁波', '温州', '深圳', '成都', '杭州'] 5 | let index = 0 6 | let num = 0 7 | for (let i = 0; i < 24; i++) { 8 | let zhendaoObj = { 9 | type: 'zhendao', 10 | templateId: i, 11 | subheading: '', // 副标题 12 | company: '', // 公司 13 | local: '', // 地方 14 | background_img: require('@/assets/card/1.png'), // 背景图片 15 | phone_icon: require('@/assets/nav/phone.png'), // 电话图片 16 | email_icon: require('@/assets/nav/email.png'), // 邮件图片 17 | address_icon: require('@/assets/nav/map.png')// 地址图片 18 | } 19 | 20 | num++ 21 | if (num > 3) { 22 | index++ 23 | num = 1 24 | } 25 | zhendaoObj.company = `珍岛股份·${companyList[index]}` 26 | zhendaoObj.local = companyList[index] 27 | 28 | if ((i - 1) % 3 === 0) { 29 | zhendaoObj.subheading = 'T云商务' 30 | } else if ((i - 2) % 3 === 0) { 31 | zhendaoObj.subheading = 'T云客服' 32 | } 33 | zhendaoList.push(zhendaoObj) 34 | } 35 | 36 | // 其他模板参数 37 | let otherList = [ 38 | { 39 | type: 'other', // 珍岛的模板是zhendao,别的都是other 40 | templateId: 24, 41 | subheading: '', // 副标题 42 | company: '', // 公司 43 | local: '', // 地方 44 | background_img: require('@/assets/card/15.png'), // 背景图片 45 | phone_icon: require('@/assets/nav/phone3.png'), // 电话图片 46 | email_icon: require('@/assets/nav/email3.png'), // 邮件图片 47 | address_icon: require('@/assets/nav/address3.png'), // 地址图片 48 | thumbnail: require('@/assets/card/thumbnail/3.png')// 缩略图 49 | }, 50 | { 51 | type: 'other', // 珍岛的模板是zhendao,别的都是other 52 | templateId: 25, 53 | subheading: '', // 副标题-不是珍岛的模板不用填 54 | company: '', // 公司-不是珍岛的模板不用填 55 | local: '', // 地方-不是珍岛的模板不用填 56 | background_img: require('@/assets/card/16.png'), // 背景图片 57 | phone_icon: require('@/assets/nav/phone4.png'), // 电话图片 58 | email_icon: require('@/assets/nav/email4.png'), // 邮件图片 59 | address_icon: require('@/assets/nav/address4.png'), // 地址图片 60 | thumbnail: require('@/assets/card/16.png')// 缩略图 61 | }, 62 | { 63 | type: 'other', // 珍岛的模板是zhendao,别的都是other 64 | templateId: 26, 65 | subheading: '', // 副标题-不是珍岛的模板不用填 66 | company: '', // 公司-不是珍岛的模板不用填 67 | local: '', // 地方-不是珍岛的模板不用填 68 | background_img: require('@/assets/card/17.png'), // 背景图片 69 | phone_icon: require('@/assets/nav/phone4.png'), // 电话图片 70 | email_icon: require('@/assets/nav/email4.png'), // 邮件图片 71 | address_icon: require('@/assets/nav/address4.png'), // 地址图片 72 | thumbnail: require('@/assets/card/thumbnail/1.png')// 缩略图 73 | }, 74 | { 75 | type: 'other', // 珍岛的模板是zhendao,别的都是other 76 | templateId: 27, 77 | subheading: '', // 副标题-不是珍岛的模板不用填 78 | company: '', // 公司-不是珍岛的模板不用填 79 | local: '', // 地方-不是珍岛的模板不用填 80 | background_img: require('@/assets/card/1.png'), // 背景图片 81 | phone_icon: require('@/assets/nav/phone4.png'), // 电话图片 82 | email_icon: require('@/assets/nav/email4.png'), // 邮件图片 83 | address_icon: require('@/assets/nav/address4.png'), // 地址图片 84 | thumbnail: require('@/assets/card/thumbnail/1.png')// 缩略图 85 | }, 86 | { 87 | type: 'other', // 珍岛的模板是zhendao,别的都是other 88 | templateId: 28, 89 | subheading: '', // 副标题-不是珍岛的模板不用填 90 | company: '', // 公司-不是珍岛的模板不用填 91 | local: '', // 地方-不是珍岛的模板不用填 92 | background_img: require('@/assets/card/18.png'), // 背景图片 93 | phone_icon: require('@/assets/nav/cellphone1.png'), // 电话图片 94 | email_icon: require('@/assets/nav/email.png'), // 邮件图片 95 | address_icon: require('@/assets/nav/address1.png'), // 地址图片 96 | thumbnail: require('@/assets/card/thumbnail/5.png')// 缩略图 97 | }, 98 | { 99 | type: 'other', // 珍岛的模板是zhendao,别的都是other 100 | templateId: 29, 101 | subheading: '', // 副标题-不是珍岛的模板不用填 102 | company: '', // 公司-不是珍岛的模板不用填 103 | local: '', // 地方-不是珍岛的模板不用填 104 | background_img: require('@/assets/card/19.png'), // 背景图片 105 | phone_icon: require('@/assets/nav/cellphone1.png'), // 电话图片 106 | email_icon: require('@/assets/nav/email.png'), // 邮件图片 107 | address_icon: require('@/assets/nav/address1.png'), // 地址图片 108 | thumbnail: require('@/assets/card/thumbnail/6.png')// 缩略图 109 | }, 110 | { 111 | type: 'other', // 珍岛的模板是zhendao,别的都是other 112 | templateId: 30, 113 | subheading: '', // 副标题-不是珍岛的模板不用填 114 | company: '', // 公司-不是珍岛的模板不用填 115 | local: '', // 地方-不是珍岛的模板不用填 116 | background_img: require('@/assets/card/20.png'), // 背景图片 117 | phone_icon: require('@/assets/nav/phone4.png'), // 电话图片 118 | email_icon: require('@/assets/nav/email4.png'), // 邮件图片 119 | address_icon: require('@/assets/nav/address4.png'), // 地址图片 120 | thumbnail: require('@/assets/card/thumbnail/7.png')// 缩略图 121 | }, 122 | { 123 | type: 'other', // 珍岛的模板是zhendao,别的都是other 124 | templateId: 31, 125 | subheading: '', // 副标题 126 | company: '', // 公司 127 | local: '', // 地方 128 | background_img: require('@/assets/card/21.png'), // 背景图片 129 | phone_icon: require('@/assets/nav/phone3.png'), // 电话图片 130 | email_icon: require('@/assets/nav/email3.png'), // 邮件图片 131 | address_icon: require('@/assets/nav/address3.png'), // 地址图片 132 | thumbnail: require('@/assets/card/thumbnail/8.png')// 缩略图 133 | } 134 | 135 | ] 136 | 137 | const templateList = zhendaoList.concat(otherList) 138 | console.log(templateList) 139 | 140 | export default templateList 141 | -------------------------------------------------------------------------------- /src/utils/global.js: -------------------------------------------------------------------------------- 1 | class socket { 2 | constructor (name) { 3 | this.name = name 4 | } 5 | test () { 6 | alert('test') 7 | } 8 | parseTime (time, cFormat) { 9 | if (arguments.length === 0) { 10 | return null 11 | } 12 | const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' 13 | let date 14 | if (typeof time === 'object') { 15 | date = time 16 | } else { 17 | if (('' + time).length === 10) time = parseInt(time) * 1000 18 | date = new Date(time) 19 | } 20 | const formatObj = { 21 | y: date.getFullYear(), 22 | m: date.getMonth() + 1, 23 | d: date.getDate(), 24 | h: date.getHours(), 25 | i: date.getMinutes(), 26 | s: date.getSeconds(), 27 | a: date.getDay() 28 | } 29 | const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { 30 | let value = formatObj[key] 31 | if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1] 32 | if (result.length > 0 && value < 10) { 33 | value = '0' + value 34 | } 35 | return value || 0 36 | }) 37 | return time_str 38 | } 39 | } 40 | export default socket 41 | -------------------------------------------------------------------------------- /src/utils/rem.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | !(function (n) { 3 | var e = n.document, 4 | t = e.documentElement, 5 | i = 750, 6 | d = i / 100, 7 | o = 'orientationchange' in n ? 'orientationchange' : 'resize', 8 | a = function () { 9 | var n = t.clientWidth || 375 10 | n > 750 && (n = 750) 11 | t.style.fontSize = n / d + 'px' 12 | } 13 | e.addEventListener && (n.addEventListener(o, a, !1), e.addEventListener('DOMContentLoaded', a, !1)) 14 | }(window)) 15 | -------------------------------------------------------------------------------- /src/utils/request.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import store from '../store' 3 | import { 4 | getToken 5 | } from './auth' 6 | // import { getToken } from '@/utils/auth' 7 | import { 8 | AlertModule 9 | } from 'vux' 10 | 11 | let baseURL = '' 12 | if (process.env.NODE_ENV === 'development') { 13 | baseURL = '/index.php' 14 | } else { 15 | baseURL = '' 16 | // process.env.BASE_API 17 | } 18 | 19 | // 创建axios实例 20 | const service = axios.create({ 21 | baseURL, // process.env.BASE_API, // api的base_url 22 | timeout: 15000, // 请求超时时间 23 | withCredentials: true 24 | }) 25 | 26 | // request拦截器 27 | service.interceptors.request.use(config => { 28 | if (store.getters.token) { 29 | // config.headers['X-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 30 | } 31 | return config 32 | }, error => { 33 | // Do something with request error 34 | console.log(error) // for debug 35 | Promise.reject(error) 36 | }) 37 | 38 | // respone拦截器 39 | service.interceptors.response.use( 40 | response => { 41 | /** 42 | * code为非20000是抛错 可结合自己业务进行修改 43 | */ 44 | if (response.isSuccess) { 45 | return response.data 46 | } 47 | const res = response.data 48 | if (res.isSuccess) { 49 | return response.data 50 | } 51 | console.log(res) 52 | if (res.code !== 200) { 53 | // alert(res.msg) 54 | // AlertModule.show({ 55 | // title: '提示', 56 | // content: res.msg 57 | // }) 58 | // 201:Token 过期了;0:必填checked校验 59 | if (res.code === 201) { 60 | AlertModule.show({ 61 | title: '提示', 62 | content: '用户信息过期,请重新登录' 63 | }) 64 | // 如果可以请关闭窗口 65 | } 66 | if (res.code === 0) { 67 | AlertModule.show({ 68 | title: '提示', 69 | content: res.msg 70 | }) 71 | } 72 | return Promise.reject('error') 73 | } else { 74 | return response.data 75 | } 76 | }, 77 | error => { 78 | console.log('err' + error) 79 | const token = getToken() 80 | /* AlertModule.show({ 81 | title: '提示', 82 | content: token 83 | }) */ 84 | return Promise.reject(error) 85 | } 86 | ) 87 | 88 | export default service 89 | -------------------------------------------------------------------------------- /src/views/client/follow.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-08 17:56:28 4 | * @Last Modified by: Jessica 5 | * @Last Modified time: 2018-10-17 16:26:32 6 | */ 7 | 21 | 22 | 76 | 77 | 117 | -------------------------------------------------------------------------------- /src/views/client/followRecord.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: zhangmengli 3 | * @Date: 2018-12-26 18:18:43 4 | * @Last Modified by: zhangmengli 5 | * @Last Modified time: 2018-12-26 18:18:43 6 | */ 7 | 29 | 30 | 142 | 143 | 181 | -------------------------------------------------------------------------------- /src/views/contacts/insertClient.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-04 10:17:41 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-09-04 10:55:39 6 | */ 7 | 21 | 22 | 41 | 42 | 67 | -------------------------------------------------------------------------------- /src/views/contacts/insertTag.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-04 09:31:33 4 | * @Last Modified by: Jessica 5 | * @Last Modified time: 2018-10-17 21:45:36 6 | */ 7 | 59 | 60 | 129 | 130 | 204 | -------------------------------------------------------------------------------- /src/views/home/main.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-08-28 10:38:59 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-08-29 15:49:23 6 | */ 7 | 15 | 16 | 34 | 35 | 38 | -------------------------------------------------------------------------------- /src/views/homeList/seeWebsite.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-01 14:07:51 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-09-01 15:36:00 6 | */ 7 | 48 | 49 | 82 | 83 | 166 | -------------------------------------------------------------------------------- /src/views/messageManage/detail.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-03 09:28:57 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-09-03 10:08:22 6 | */ 7 | 36 | 37 | 50 | 51 | 94 | -------------------------------------------------------------------------------- /src/views/messageManage/index.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-01 18:02:51 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-09-03 10:16:18 6 | */ 7 | 21 | 22 | 40 | 41 | 109 | -------------------------------------------------------------------------------- /src/views/messageManage/tpl.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 29 | 30 | 58 | -------------------------------------------------------------------------------- /src/views/news/companyDetails.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 49 | 50 | 79 | -------------------------------------------------------------------------------- /src/views/self/calendarDetail.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-06 14:08:03 4 | * @Last Modified by: Jessica 5 | * @Last Modified time: 2018-10-31 16:51:44 6 | */ 7 | 47 | 48 | 96 | 97 | 130 | -------------------------------------------------------------------------------- /src/views/self/chatWindow.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-07 11:31:27 4 | * @Last Modified by: mikey.zhaopeng 5 | * @Last Modified time: 2018-09-29 12:48:22 6 | */ 7 | 23 | 24 | 67 | 68 | 138 | -------------------------------------------------------------------------------- /src/views/self/edit_list.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 43 | 44 | -------------------------------------------------------------------------------- /src/views/self/qrcode.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-14 14:26:39 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-10-09 17:29:21 6 | */ 7 | 16 | 17 | 49 | 50 | 88 | -------------------------------------------------------------------------------- /src/views/self/recommended_case.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 75 | 76 | -------------------------------------------------------------------------------- /src/views/self/recommended_product.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 76 | 77 | -------------------------------------------------------------------------------- /src/views/self/sayHi.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-07 14:25:23 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-09-17 20:41:36 6 | */ 7 | 20 | 21 | 62 | 63 | 79 | -------------------------------------------------------------------------------- /src/views/self/saySetting.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-07 15:05:29 4 | * @Last Modified by: Jessica 5 | * @Last Modified time: 2018-10-13 17:59:04 6 | */ 7 | 55 | 56 | 95 | 96 | 194 | -------------------------------------------------------------------------------- /src/views/self/setting.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-07 09:39:57 4 | * @Last Modified by: kaker.xutianxing 5 | * @Last Modified time: 2018-10-09 15:30:29 6 | */ 7 | 23 | 24 | 65 | 66 | 82 | -------------------------------------------------------------------------------- /src/views/self/talkDetail.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: kaker.xutianxing 3 | * @Date: 2018-09-06 16:09:14 4 | * @Last Modified by: Jessica 5 | * @Last Modified time: 2018-10-18 11:57:25 6 | */ 7 | 26 | 27 | 105 | 106 | 212 | -------------------------------------------------------------------------------- /src/warning.vue: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: zhangmengli 3 | * @Date: 2018-10-10 10:20:21 4 | * @Last Modified by: Jessica 5 | * @Last Modified time: 2018-10-17 17:19:33 6 | */ 7 | 14 | 15 | 26 | 27 | 40 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/.gitkeep -------------------------------------------------------------------------------- /static/css/index_loading.css: -------------------------------------------------------------------------------- 1 | .index_global_dialog{ 2 | width: 100%; 3 | height: 100%; 4 | background: #fff; 5 | position: fixed; 6 | top: 0; 7 | left: 0; 8 | z-index: 9999; 9 | } 10 | 11 | .index_global_dialog .global_icon{ 12 | position: absolute; 13 | width: 100px; 14 | height:180px; 15 | top: 0; 16 | bottom: 0; 17 | right: 0; 18 | left: 0; 19 | margin: auto; 20 | } 21 | 22 | .index_global_dialog .global_icon p{ 23 | width:100px; 24 | height: 40px; 25 | line-height:40px; 26 | text-align: center; 27 | color: #333; 28 | margin-top:10px; 29 | font-size:14px 30 | } 31 | 32 | .index_global_dialog .global_icon .frame{ 33 | position: relative; 34 | width: 80px; 35 | height: 80px; 36 | margin: 0 auto; 37 | } 38 | 39 | .index_global_dialog .global_icon img{ 40 | position: absolute; 41 | width: 100%; 42 | height: 100%; 43 | } 44 | 45 | .index_global_dialog .global_icon img.loading_1{ 46 | animation: spin 1s linear infinite; 47 | -webkit-animation:spin 1s linear infinite; 48 | } 49 | 50 | @keyframes spin { 51 | 0%{ 52 | transform: rotate(0deg); 53 | } 54 | 100%{ 55 | transform: rotate(360deg); 56 | } 57 | } -------------------------------------------------------------------------------- /static/image/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/0.png -------------------------------------------------------------------------------- /static/image/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/10.png -------------------------------------------------------------------------------- /static/image/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/11.png -------------------------------------------------------------------------------- /static/image/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/12.png -------------------------------------------------------------------------------- /static/image/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/13.png -------------------------------------------------------------------------------- /static/image/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/14.png -------------------------------------------------------------------------------- /static/image/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/15.png -------------------------------------------------------------------------------- /static/image/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/16.png -------------------------------------------------------------------------------- /static/image/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/17.png -------------------------------------------------------------------------------- /static/image/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/18.png -------------------------------------------------------------------------------- /static/image/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/19.png -------------------------------------------------------------------------------- /static/image/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/4.png -------------------------------------------------------------------------------- /static/image/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/5.png -------------------------------------------------------------------------------- /static/image/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/6.png -------------------------------------------------------------------------------- /static/image/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/7.png -------------------------------------------------------------------------------- /static/image/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/8.png -------------------------------------------------------------------------------- /static/image/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/9.png -------------------------------------------------------------------------------- /static/image/l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/l.gif -------------------------------------------------------------------------------- /static/image/loading_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/loading_1.png -------------------------------------------------------------------------------- /static/image/loading_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/loading_2.png -------------------------------------------------------------------------------- /static/image/moren.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/moren.jpg -------------------------------------------------------------------------------- /static/image/p_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/p_icon.jpg -------------------------------------------------------------------------------- /static/image/qqface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakercoco/AI-card/e8824c62e194fb6b8335764a7bbd014cc312f5c7/static/image/qqface.png -------------------------------------------------------------------------------- /test/e2e/custom-assertions/elementCount.js: -------------------------------------------------------------------------------- 1 | // A custom Nightwatch assertion. 2 | // The assertion name is the filename. 3 | // Example usage: 4 | // 5 | // browser.assert.elementCount(selector, count) 6 | // 7 | // For more information on custom assertions see: 8 | // http://nightwatchjs.org/guide#writing-custom-assertions 9 | 10 | exports.assertion = function (selector, count) { 11 | this.message = 'Testing if element <' + selector + '> has count: ' + count 12 | this.expected = count 13 | this.pass = function (val) { 14 | return val === this.expected 15 | } 16 | this.value = function (res) { 17 | return res.value 18 | } 19 | this.command = function (cb) { 20 | var self = this 21 | return this.api.execute(function (selector) { 22 | return document.querySelectorAll(selector).length 23 | }, [selector], function (res) { 24 | cb.call(self, res) 25 | }) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /test/e2e/nightwatch.conf.js: -------------------------------------------------------------------------------- 1 | require('babel-register') 2 | var config = require('../../config') 3 | 4 | // http://nightwatchjs.org/gettingstarted#settings-file 5 | module.exports = { 6 | src_folders: ['test/e2e/specs'], 7 | output_folder: 'test/e2e/reports', 8 | custom_assertions_path: ['test/e2e/custom-assertions'], 9 | 10 | selenium: { 11 | start_process: true, 12 | server_path: require('selenium-server').path, 13 | host: '127.0.0.1', 14 | port: 4444, 15 | cli_args: { 16 | 'webdriver.chrome.driver': require('chromedriver').path 17 | } 18 | }, 19 | 20 | test_settings: { 21 | default: { 22 | selenium_port: 4444, 23 | selenium_host: 'localhost', 24 | silent: true, 25 | globals: { 26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 27 | } 28 | }, 29 | 30 | chrome: { 31 | desiredCapabilities: { 32 | browserName: 'chrome', 33 | javascriptEnabled: true, 34 | acceptSslCerts: true 35 | } 36 | }, 37 | 38 | firefox: { 39 | desiredCapabilities: { 40 | browserName: 'firefox', 41 | javascriptEnabled: true, 42 | acceptSslCerts: true 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /test/e2e/runner.js: -------------------------------------------------------------------------------- 1 | // 1. start the dev server using production config 2 | process.env.NODE_ENV = 'testing' 3 | 4 | const webpack = require('webpack') 5 | const DevServer = require('webpack-dev-server') 6 | 7 | const webpackConfig = require('../../build/webpack.prod.conf') 8 | const devConfigPromise = require('../../build/webpack.dev.conf') 9 | 10 | let server 11 | 12 | devConfigPromise.then(devConfig => { 13 | const devServerOptions = devConfig.devServer 14 | const compiler = webpack(webpackConfig) 15 | server = new DevServer(compiler, devServerOptions) 16 | const port = devServerOptions.port 17 | const host = devServerOptions.host 18 | return server.listen(port, host) 19 | }) 20 | .then(() => { 21 | // 2. run the nightwatch test suite against it 22 | // to run in additional browsers: 23 | // 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings" 24 | // 2. add it to the --env flag below 25 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` 26 | // For more information on Nightwatch's config file, see 27 | // http://nightwatchjs.org/guide#settings-file 28 | let opts = process.argv.slice(2) 29 | if (opts.indexOf('--config') === -1) { 30 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) 31 | } 32 | if (opts.indexOf('--env') === -1) { 33 | opts = opts.concat(['--env', 'chrome']) 34 | } 35 | 36 | const spawn = require('cross-spawn') 37 | const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) 38 | 39 | runner.on('exit', function (code) { 40 | server.close() 41 | process.exit(code) 42 | }) 43 | 44 | runner.on('error', function (err) { 45 | server.close() 46 | throw err 47 | }) 48 | }) 49 | -------------------------------------------------------------------------------- /test/e2e/specs/test.js: -------------------------------------------------------------------------------- 1 | // For authoring Nightwatch tests, see 2 | // http://nightwatchjs.org/guide#usage 3 | 4 | module.exports = { 5 | 'default e2e tests': function (browser) { 6 | // automatically uses dev Server port from /config.index.js 7 | // default: http://localhost:8080 8 | // see nightwatch.conf.js 9 | const devServer = browser.globals.devServerURL 10 | 11 | browser 12 | .url(devServer) 13 | .waitForElementVisible('#app', 5000) 14 | .assert.elementPresent('.hello') 15 | .assert.containsText('h1', 'Welcome to Your Vue.js App') 16 | .assert.elementCount('img', 1) 17 | .end() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jest": true 4 | }, 5 | "globals": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/unit/jest.conf.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | rootDir: path.resolve(__dirname, '../../'), 5 | moduleFileExtensions: [ 6 | 'js', 7 | 'json', 8 | 'vue' 9 | ], 10 | moduleNameMapper: { 11 | '^@/(.*)$': '/src/$1' 12 | }, 13 | transform: { 14 | '^.+\\.js$': '/node_modules/babel-jest', 15 | '.*\\.(vue)$': '/node_modules/vue-jest' 16 | }, 17 | testPathIgnorePatterns: [ 18 | '/test/e2e' 19 | ], 20 | snapshotSerializers: ['/node_modules/jest-serializer-vue'], 21 | setupFiles: ['/test/unit/setup'], 22 | mapCoverage: true, 23 | coverageDirectory: '/test/unit/coverage', 24 | collectCoverageFrom: [ 25 | 'src/**/*.{js,vue}', 26 | '!src/main.js', 27 | '!src/router/index.js', 28 | '!**/node_modules/**' 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /test/unit/setup.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | Vue.config.productionTip = false 4 | -------------------------------------------------------------------------------- /test/unit/specs/HelloWorld.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import HelloWorld from '@/components/HelloWorld' 3 | 4 | describe('HelloWorld.vue', () => { 5 | it('should render correct contents', () => { 6 | const Constructor = Vue.extend(HelloWorld) 7 | const vm = new Constructor().$mount() 8 | expect(vm.$el.querySelector('.hello h1').textContent) 9 | .toEqual('Welcome to Your Vue.js App') 10 | }) 11 | }) 12 | --------------------------------------------------------------------------------