diff --git a/collect_information/.editorconfig b/collect_information/.editorconfig new file mode 100644 index 0000000..5760be5 --- /dev/null +++ b/collect_information/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/collect_information/.env.development b/collect_information/.env.development new file mode 100644 index 0000000..edad538 --- /dev/null +++ b/collect_information/.env.development @@ -0,0 +1,3 @@ +# 配置文档参考 https://taro-docs.jd.com/docs/next/env-mode-config +TARO_APP_ID="wx0acd1c4fcf94bdd3" +TARO_APP_BASE_API="http://172.10.10.93:8765" diff --git a/collect_information/.env.production b/collect_information/.env.production new file mode 100644 index 0000000..be6f45e --- /dev/null +++ b/collect_information/.env.production @@ -0,0 +1 @@ +# TARO_APP_ID="生产环境下的小程序appid" \ No newline at end of file diff --git a/collect_information/.env.test b/collect_information/.env.test new file mode 100644 index 0000000..0215b61 --- /dev/null +++ b/collect_information/.env.test @@ -0,0 +1 @@ +# TARO_APP_ID="测试环境下的小程序appid" \ No newline at end of file diff --git a/collect_information/.eslintrc b/collect_information/.eslintrc new file mode 100644 index 0000000..59b61d8 --- /dev/null +++ b/collect_information/.eslintrc @@ -0,0 +1,19 @@ +// ESLint 检查 .vue 文件需要单独配置编辑器: +// https://eslint.vuejs.org/user-guide/#editor-integrations +{ + "extends": [ + "taro/vue3" + ], + "rules": { + // 添加组件命名忽略规则 + "vue/multi-word-component-names": [ + "error", + { + //需要忽略的组件名 + "ignores": [ + "index" + ] + } + ] + } +} diff --git a/collect_information/.gitignore b/collect_information/.gitignore new file mode 100644 index 0000000..63712f5 --- /dev/null +++ b/collect_information/.gitignore @@ -0,0 +1,13 @@ +dist/ +deploy_versions/ +.temp/ +.rn_temp/ +node_modules/ +.DS_Store +.swc +.idea + + +components.d.ts +package-lock.json +yarn.lock diff --git a/collect_information/__tests__/index.test.js b/collect_information/__tests__/index.test.js new file mode 100644 index 0000000..c3904d1 --- /dev/null +++ b/collect_information/__tests__/index.test.js @@ -0,0 +1,12 @@ +import TestUtils from '@tarojs/test-utils-vue3' + +describe('Testing', () => { + + test('Test', async () => { + const testUtils = new TestUtils() + await testUtils.createApp() + await testUtils.PageLifecycle.onShow('pages/index/index') + expect(testUtils.html()).toMatchSnapshot() + }) + +}) diff --git a/collect_information/babel.config.js b/collect_information/babel.config.js new file mode 100644 index 0000000..dc20faf --- /dev/null +++ b/collect_information/babel.config.js @@ -0,0 +1,10 @@ +// babel-preset-taro 更多选项和默认值: +// https://github.com/NervJS/taro/blob/next/packages/babel-preset-taro/README.md +module.exports = { + presets: [ + ['taro', { + framework: 'vue3', + ts: true + }] + ] +} diff --git a/collect_information/config/dev.ts b/collect_information/config/dev.ts new file mode 100644 index 0000000..c37eb43 --- /dev/null +++ b/collect_information/config/dev.ts @@ -0,0 +1,9 @@ +import type { UserConfigExport } from "@tarojs/cli"; +export default { + logger: { + quiet: false, + stats: true + }, + mini: {}, + h5: {} +} satisfies UserConfigExport diff --git a/collect_information/config/index.ts b/collect_information/config/index.ts new file mode 100644 index 0000000..3a25c14 --- /dev/null +++ b/collect_information/config/index.ts @@ -0,0 +1,115 @@ +import {defineConfig, type UserConfigExport} from '@tarojs/cli' +import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin' +import devConfig from './dev' +import prodConfig from './prod' +import ComponentsPlugin from 'unplugin-vue-components/webpack' +import NutUIResolver from "@nutui/auto-import-resolver"; + +// https://taro-docs.jd.com/docs/next/config#defineconfig-辅助函数 +export default defineConfig(async (merge, {command, mode}) => { + const baseConfig: UserConfigExport = { + projectName: 'collect_information', + date: '2024-9-14', + designWidth(input: any) { + // 配置 NutUI 375 尺寸 + if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) { + return 375 + } + // 全局使用 Taro 默认的 750 尺寸 + return 750 + }, + deviceRatio: { + 640: 2.34 / 2, + 750: 1, + 828: 1.81 / 2, + 375: 2 + }, + sourceRoot: 'src', + outputRoot: 'dist', + // 开启 HTML 插件 + plugins: ['@tarojs/plugin-html'], + defineConstants: {}, + copy: { + patterns: [], + options: {} + }, + framework: 'vue3', + compiler: 'webpack5', + cache: { + enable: false // Webpack 持久化缓存配置,建议开启。默认配置请参考:https://docs.taro.zone/docs/config-detail#cache + }, + mini: { + miniCssExtractPluginOption: { + ignoreOrder: true + }, + postcss: { + pxtransform: { + enable: true, + config: {} + }, + url: { + enable: true, + config: { + limit: 1024 // 设定转换尺寸上限 + } + }, + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + namingPattern: 'module', // 转换模式,取值为 global/module + generateScopedName: '[name]__[local]___[hash:base64:5]' + } + } + }, + webpackChain(chain) { + chain.resolve.plugin('tsconfig-paths').use(TsconfigPathsPlugin) + chain.plugin('unplugin-vue-components').use(ComponentsPlugin({ + resolvers: [NutUIResolver({taro: true})] + })) + } + }, + h5: { + publicPath: '/', + staticDirectory: 'static', + output: { + filename: 'js/[name].[hash:8].js', + chunkFilename: 'js/[name].[chunkhash:8].js' + }, + miniCssExtractPluginOption: { + ignoreOrder: true, + filename: 'css/[name].[hash].css', + chunkFilename: 'css/[name].[chunkhash].css' + }, + postcss: { + autoprefixer: { + enable: true, + config: {} + }, + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + config: { + namingPattern: 'module', // 转换模式,取值为 global/module + generateScopedName: '[name]__[local]___[hash:base64:5]' + } + } + }, + webpackChain(chain) { + chain.resolve.plugin('tsconfig-paths').use(TsconfigPathsPlugin) + } + }, + rn: { + appName: 'taroDemo', + postcss: { + cssModules: { + enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true + } + } + } + } + if (process.env.NODE_ENV === 'development') { + // 本地开发构建配置(不混淆压缩) + return merge({}, baseConfig, devConfig) + } + // 生产构建配置(默认开启压缩混淆等) + return merge({}, baseConfig, prodConfig) +}) diff --git a/collect_information/config/prod.ts b/collect_information/config/prod.ts new file mode 100644 index 0000000..c9ba67f --- /dev/null +++ b/collect_information/config/prod.ts @@ -0,0 +1,32 @@ +import type { UserConfigExport } from "@tarojs/cli"; +export default { + mini: {}, + h5: { + /** + * WebpackChain 插件配置 + * @docs https://github.com/neutrinojs/webpack-chain + */ + // webpackChain (chain) { + // /** + // * 如果 h5 端编译后体积过大,可以使用 webpack-bundle-analyzer 插件对打包体积进行分析。 + // * @docs https://github.com/webpack-contrib/webpack-bundle-analyzer + // */ + // chain.plugin('analyzer') + // .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, []) + // /** + // * 如果 h5 端首屏加载时间过长,可以使用 prerender-spa-plugin 插件预加载首页。 + // * @docs https://github.com/chrisvfritz/prerender-spa-plugin + // */ + // const path = require('path') + // const Prerender = require('prerender-spa-plugin') + // const staticDir = path.join(__dirname, '..', 'dist') + // chain + // .plugin('prerender') + // .use(new Prerender({ + // staticDir, + // routes: [ '/pages/index/index' ], + // postProcess: (context) => ({ ...context, outputPath: path.join(staticDir, 'index.html') }) + // })) + // } + } +} satisfies UserConfigExport diff --git a/collect_information/jest.config.ts b/collect_information/jest.config.ts new file mode 100644 index 0000000..e720a3c --- /dev/null +++ b/collect_information/jest.config.ts @@ -0,0 +1,6 @@ +const defineJestConfig = require('@tarojs/test-utils-vue3/dist/jest.js').default + +module.exports = defineJestConfig({ + testEnvironment: 'jsdom', + testMatch: ['/__tests__/**/*.(spec|test).[jt]s?(x)'] +}) diff --git a/collect_information/package.json b/collect_information/package.json new file mode 100644 index 0000000..1830680 --- /dev/null +++ b/collect_information/package.json @@ -0,0 +1,94 @@ +{ + "name": "collect_information", + "version": "1.0.0", + "private": true, + "description": "警保联动小程序", + "templateInfo": { + "name": "default", + "typescript": true, + "css": "Sass", + "framework": "Vue3" + }, + "scripts": { + "build:weapp": "taro build --type weapp", + "build:swan": "taro build --type swan", + "build:alipay": "taro build --type alipay", + "build:tt": "taro build --type tt", + "build:h5": "taro build --type h5", + "build:rn": "taro build --type rn", + "build:qq": "taro build --type qq", + "build:jd": "taro build --type jd", + "build:quickapp": "taro build --type quickapp", + "build:harmony-hybrid": "taro build --type harmony-hybrid", + "dev:weapp": "npm run build:weapp -- --watch", + "dev:swan": "npm run build:swan -- --watch", + "dev:alipay": "npm run build:alipay -- --watch", + "dev:tt": "npm run build:tt -- --watch", + "dev:h5": "npm run build:h5 -- --watch", + "dev:rn": "npm run build:rn -- --watch", + "dev:qq": "npm run build:qq -- --watch", + "dev:jd": "npm run build:jd -- --watch", + "dev:quickapp": "npm run build:quickapp -- --watch", + "dev:harmony-hybrid": "npm run build:harmony-hybrid -- --watch", + "test": "jest" + }, + "browserslist": [ + "last 3 versions", + "Android >= 4.1", + "ios >= 8" + ], + "author": "", + "dependencies": { + "@babel/runtime": "^7.21.5", + "@nutui/nutui-taro": "^4.3.13", + "@tarojs/components": "3.6.26", + "@tarojs/helper": "3.6.26", + "@tarojs/plugin-framework-vue3": "3.6.26", + "@tarojs/plugin-html": "^3.6.26", + "@tarojs/plugin-platform-alipay": "3.6.26", + "@tarojs/plugin-platform-h5": "3.6.26", + "@tarojs/plugin-platform-harmony-hybrid": "3.6.26", + "@tarojs/plugin-platform-jd": "3.6.26", + "@tarojs/plugin-platform-qq": "3.6.26", + "@tarojs/plugin-platform-swan": "3.6.26", + "@tarojs/plugin-platform-tt": "3.6.26", + "@tarojs/plugin-platform-weapp": "3.6.26", + "@tarojs/runtime": "3.6.26", + "@tarojs/shared": "3.6.26", + "@tarojs/taro": "3.6.26", + "dayjs": "^1.11.13", + "pinia": "^2.2.2", + "vue": "^3.0.0" + }, + "devDependencies": { + "@babel/core": "^7.8.0", + "@nutui/auto-import-resolver": "^1.0.0", + "@tarojs/cli": "3.6.26", + "@tarojs/taro-loader": "3.6.26", + "@tarojs/test-utils-vue3": "^0.1.1", + "@tarojs/webpack5-runner": "3.6.26", + "@types/jest": "^29.3.1", + "@types/node": "^18.15.11", + "@types/webpack-env": "^1.13.6", + "@typescript-eslint/eslint-plugin": "^6.2.0", + "@typescript-eslint/parser": "^6.2.0", + "@vue/babel-plugin-jsx": "^1.0.6", + "@vue/compiler-sfc": "^3.0.0", + "babel-preset-taro": "3.6.26", + "css-loader": "3.4.2", + "eslint": "^8.12.0", + "eslint-config-taro": "3.6.26", + "eslint-plugin-vue": "^8.0.0", + "jest": "^29.3.1", + "jest-environment-jsdom": "^29.5.0", + "postcss": "^8.4.18", + "style-loader": "1.3.0", + "stylelint": "^14.4.0", + "ts-node": "^10.9.1", + "tsconfig-paths-webpack-plugin": "^4.1.0", + "typescript": "^5.1.0", + "unplugin-vue-components": "^0.27.4", + "vue-loader": "^17.1.0", + "webpack": "5.78.0" + } +} diff --git a/collect_information/project.config.json b/collect_information/project.config.json new file mode 100644 index 0000000..2d18dde --- /dev/null +++ b/collect_information/project.config.json @@ -0,0 +1,15 @@ +{ + "miniprogramRoot": "./dist", + "projectname": "collect_information", + "description": "警保联动小程序", + "appid": "touristappid", + "setting": { + "urlCheck": false, + "es6": false, + "enhance": false, + "compileHotReLoad": false, + "postcss": false, + "minified": false + }, + "compileType": "miniprogram" +} diff --git a/collect_information/project.tt.json b/collect_information/project.tt.json new file mode 100644 index 0000000..409b7a0 --- /dev/null +++ b/collect_information/project.tt.json @@ -0,0 +1,9 @@ +{ + "miniprogramRoot": "./", + "projectname": "collect_information", + "appid": "testAppId", + "setting": { + "es6": false, + "minified": false + } +} diff --git a/collect_information/src/app.config.ts b/collect_information/src/app.config.ts new file mode 100644 index 0000000..3690c73 --- /dev/null +++ b/collect_information/src/app.config.ts @@ -0,0 +1,38 @@ +import {MINI_PROGRAM_USER_CONFIG} from "@/config"; + + +const tabBarItems = Object.values(MINI_PROGRAM_USER_CONFIG).map(item => item.tabBarList).flat() + +export default defineAppConfig({ + pages: [ + 'pages/login/login', + 'pages/register/register', + ...tabBarItems.map(i => i.pagePath) + ], + subPackages: [ + { + root: "subPages/projectManager", + pages: [ + 'myProject/myProject', + 'myProject/projectDetails/projectDetails', + 'securityUserForm/securityUserForm', + ] + }, { + root: "subPages/police", + pages: [ + 'myEnterprisesUnit/myEnterprisesUnit', + 'myEnterprisesUnit/projectDetails/projectDetails' + ] + } + ], + window: { + backgroundTextStyle: 'light', + navigationBarBackgroundColor: '#4e87ff', + navigationBarTitleText: '', + navigationBarTextStyle: 'white', + }, + tabBar: { + custom: true, + list: tabBarItems + } +}) diff --git a/collect_information/src/app.scss b/collect_information/src/app.scss new file mode 100644 index 0000000..e69de29 diff --git a/collect_information/src/app.ts b/collect_information/src/app.ts new file mode 100644 index 0000000..28f74dd --- /dev/null +++ b/collect_information/src/app.ts @@ -0,0 +1,32 @@ +import {createApp} from 'vue' +import '@/app.scss' +import '@/assets/css/main.css' +import {pinia} from "@/store"; +import Taro from "@tarojs/taro"; +import {MINI_PROGRAM_USER_CONFIG} from "@/config"; +import {useUserStore} from "@/store/userStore"; +import {initEnum} from "@/enums"; + +const App = createApp({ + onLaunch(opt) { + initEnum() + if (opt.path === 'subPages/projectManager/securityUserForm/securityUserForm' && opt.query.type === 'QcCodeInput') { + return + } + const tokenInfo = useUserStore().getTokenInfo(); + if (tokenInfo) { + Taro.switchTab({ + url: MINI_PROGRAM_USER_CONFIG[tokenInfo.extData.identity.value].toIndex + }) + } else { + Taro.navigateTo({ + url: '/pages/login/login', + }) + } + }, + // 入口组件不需要实现 render 方法,即使实现了也会被 taro 所覆盖 +}) + +App.use(pinia) + +export default App diff --git a/collect_information/src/assets/css/main.css b/collect_information/src/assets/css/main.css new file mode 100644 index 0000000..199b446 --- /dev/null +++ b/collect_information/src/assets/css/main.css @@ -0,0 +1,308 @@ +/* -- 内外边距 -- */ +.margin-0 { + margin: 0; +} + +.margin-xs { + margin: 10rpx; +} + +.margin-sm { + margin: 20rpx; +} + +.margin { + margin: 30rpx; +} + +.margin-lg { + margin: 40rpx; +} + +.margin-xl { + margin: 50rpx; +} + +.margin-top-xs { + margin-top: 10rpx; +} + +.margin-top-sm { + margin-top: 20rpx; +} + +.margin-top { + margin-top: 30rpx; +} + +.margin-top-lg { + margin-top: 40rpx; +} + +.margin-top-xl { + margin-top: 50rpx; +} + +.margin-right-xs { + margin-right: 10rpx; +} + +.margin-right-sm { + margin-right: 20rpx; +} + +.margin-right { + margin-right: 30rpx; +} + +.margin-right-lg { + margin-right: 40rpx; +} + +.margin-right-xl { + margin-right: 50rpx; +} + +.margin-bottom-xs { + margin-bottom: 10rpx; +} + +.margin-bottom-sm { + margin-bottom: 20rpx; +} + +.margin-bottom { + margin-bottom: 30rpx; +} + +.margin-bottom-lg { + margin-bottom: 40rpx; +} + +.margin-bottom-xl { + margin-bottom: 50rpx; +} + +.margin-left-xs { + margin-left: 10rpx; +} + +.margin-left-sm { + margin-left: 20rpx; +} + +.margin-left { + margin-left: 30rpx; +} + +.margin-left-lg { + margin-left: 40rpx; +} + +.margin-left-xl { + margin-left: 50rpx; +} + +.margin-lr-xs { + margin-left: 10rpx; + margin-right: 10rpx; +} + +.margin-lr-sm { + margin-left: 20rpx; + margin-right: 20rpx; +} + +.margin-lr { + margin-left: 30rpx; + margin-right: 30rpx; +} + +.margin-lr-lg { + margin-left: 40rpx; + margin-right: 40rpx; +} + +.margin-lr-xl { + margin-left: 50rpx; + margin-right: 50rpx; +} + +.margin-tb-xs { + margin-top: 10rpx; + margin-bottom: 10rpx; +} + +.margin-tb-sm { + margin-top: 20rpx; + margin-bottom: 20rpx; +} + +.margin-tb { + margin-top: 30rpx; + margin-bottom: 30rpx; +} + +.margin-tb-lg { + margin-top: 40rpx; + margin-bottom: 40rpx; +} + +.margin-tb-xl { + margin-top: 50rpx; + margin-bottom: 50rpx; +} + +.padding-0 { + padding: 0; +} + +.padding-xs { + padding: 10rpx; +} + +.padding-sm { + padding: 20rpx; +} + +.padding { + padding: 30rpx; +} + +.padding-lg { + padding: 40rpx; +} + +.padding-xl { + padding: 50rpx; +} + +.padding-top-xs { + padding-top: 10rpx; +} + +.padding-top-sm { + padding-top: 20rpx; +} + +.padding-top { + padding-top: 30rpx; +} + +.padding-top-lg { + padding-top: 40rpx; +} + +.padding-top-xl { + padding-top: 50rpx; +} + +.padding-right-xs { + padding-right: 10rpx; +} + +.padding-right-sm { + padding-right: 20rpx; +} + +.padding-right { + padding-right: 30rpx; +} + +.padding-right-lg { + padding-right: 40rpx; +} + +.padding-right-xl { + padding-right: 50rpx; +} + +.padding-bottom-xs { + padding-bottom: 10rpx; +} + +.padding-bottom-sm { + padding-bottom: 20rpx; +} + +.padding-bottom { + padding-bottom: 30rpx; +} + +.padding-bottom-lg { + padding-bottom: 40rpx; +} + +.padding-bottom-xl { + padding-bottom: 50rpx; +} + +.padding-left-xs { + padding-left: 10rpx; +} + +.padding-left-sm { + padding-left: 20rpx; +} + +.padding-left { + padding-left: 30rpx; +} + +.padding-left-lg { + padding-left: 40rpx; +} + +.padding-left-xl { + padding-left: 50rpx; +} + +.padding-lr-xs { + padding-left: 10rpx; + padding-right: 10rpx; +} + +.padding-lr-sm { + padding-left: 20rpx; + padding-right: 20rpx; +} + +.padding-lr { + padding-left: 30rpx; + padding-right: 30rpx; +} + +.padding-lr-lg { + padding-left: 40rpx; + padding-right: 40rpx; +} + +.padding-lr-xl { + padding-left: 50rpx; + padding-right: 50rpx; +} + +.padding-tb-xs { + padding-top: 10rpx; + padding-bottom: 10rpx; +} + +.padding-tb-sm { + padding-top: 20rpx; + padding-bottom: 20rpx; +} + +.padding-tb { + padding-top: 30rpx; + padding-bottom: 30rpx; +} + +.padding-tb-lg { + padding-top: 40rpx; + padding-bottom: 40rpx; +} + +.padding-tb-xl { + padding-top: 50rpx; + padding-bottom: 50rpx; +} diff --git a/collect_information/src/assets/images/01.png b/collect_information/src/assets/images/01.png new file mode 100644 index 0000000..b66fa47 Binary files /dev/null and b/collect_information/src/assets/images/01.png differ diff --git a/collect_information/src/assets/images/project.png b/collect_information/src/assets/images/project.png new file mode 100644 index 0000000..8de6ed4 Binary files /dev/null and b/collect_information/src/assets/images/project.png differ diff --git a/collect_information/src/assets/logo/guohui.png b/collect_information/src/assets/logo/guohui.png new file mode 100644 index 0000000..d06ce3a Binary files /dev/null and b/collect_information/src/assets/logo/guohui.png differ diff --git a/collect_information/src/assets/mine/my-active.png b/collect_information/src/assets/mine/my-active.png new file mode 100644 index 0000000..907d8a6 Binary files /dev/null and b/collect_information/src/assets/mine/my-active.png differ diff --git a/collect_information/src/assets/mine/my.png b/collect_information/src/assets/mine/my.png new file mode 100644 index 0000000..da73231 Binary files /dev/null and b/collect_information/src/assets/mine/my.png differ diff --git a/collect_information/src/assets/mine/punch-active.png b/collect_information/src/assets/mine/punch-active.png new file mode 100644 index 0000000..0098eb3 Binary files /dev/null and b/collect_information/src/assets/mine/punch-active.png differ diff --git a/collect_information/src/assets/mine/punch.png b/collect_information/src/assets/mine/punch.png new file mode 100644 index 0000000..e8ef36b Binary files /dev/null and b/collect_information/src/assets/mine/punch.png differ diff --git a/collect_information/src/config/index.ts b/collect_information/src/config/index.ts new file mode 100644 index 0000000..f9bd5c6 --- /dev/null +++ b/collect_information/src/config/index.ts @@ -0,0 +1,46 @@ +import {UserConfig} from "@/types/config"; + +/** + * 客户端 + */ +export const CLIENT_TYPE = 'MINI_PROGRAM' + +/** + * 小程序用户配置 + */ +export const MINI_PROGRAM_USER_CONFIG: Record = { + police: { + toIndex: '/pages/police/index/index', + tabBarList: [ + { + pagePath: 'pages/police/index/index', + text: '首页', + iconPath: "assets/mine/punch.png", + selectedIconPath: "assets/mine/punch-active.png" + }, + { + pagePath: 'pages/police/mine/index', + text: '警察我的', + iconPath: "assets/mine/my.png", + selectedIconPath: "assets/mine/my-active.png" + }, + ] + }, + project_manager: { + toIndex: '/pages/projectManager/index/index', + tabBarList: [ + { + pagePath: 'pages/projectManager/index/index', + text: '首页', + iconPath: "assets/mine/punch.png", + selectedIconPath: "assets/mine/punch-active.png" + }, + { + pagePath: 'pages/projectManager/mine/index', + text: '项目经理我的', + iconPath: "assets/mine/my.png", + selectedIconPath: "assets/mine/my-active.png" + }, + ] + } +} diff --git a/collect_information/src/custom-tab-bar/index.json.ts b/collect_information/src/custom-tab-bar/index.json.ts new file mode 100644 index 0000000..29210de --- /dev/null +++ b/collect_information/src/custom-tab-bar/index.json.ts @@ -0,0 +1,3 @@ +export default { + "component": true +} diff --git a/collect_information/src/custom-tab-bar/index.vue b/collect_information/src/custom-tab-bar/index.vue new file mode 100644 index 0000000..8d062e0 --- /dev/null +++ b/collect_information/src/custom-tab-bar/index.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/collect_information/src/enums/index.ts b/collect_information/src/enums/index.ts new file mode 100644 index 0000000..efdc1ef --- /dev/null +++ b/collect_information/src/enums/index.ts @@ -0,0 +1,40 @@ +import api from "@/request"; +import Taro from "@tarojs/taro"; + +type EnumType = + 'CheckStatus' + | 'DeleteFlag' + | 'IsEnable' + | 'IsOrNot' + | 'Sex' + | 'ServiceProjectType' + | 'MiniProgramUserIdentity' + +export const initEnum = () => { + api.get[]>>('/common/enums').then(resp => { + Taro.setStorageSync('enumMap', resp.data) + }) +}; + +export const enumSelectNodes = (enumType: EnumType): SelectNodeVo[] => Taro.getStorageSync('enumMap')?.[enumType] + +export const getEnumByValue = (enumType: EnumType, value: T): null | SelectNodeVo => { + const enumList = enumSelectNodes(enumType); + if (!enumList) { + return null; + } + for (let i = 0; i < enumList.length; i++) { + if (value === enumList[i].value) { + return enumList[i] + } + } + return null; +}; + +export const getEnumLabelByValue = (enumType: EnumType, value: T): string => { + const enums = getEnumByValue(enumType, value) + if (!enums) { + return '-' + } + return enums.label; +}; diff --git a/collect_information/src/index.html b/collect_information/src/index.html new file mode 100644 index 0000000..21009d9 --- /dev/null +++ b/collect_information/src/index.html @@ -0,0 +1,17 @@ + + + + + + + + + + + collect_information + + + +
+ + diff --git a/collect_information/src/pages/login/login.config.ts b/collect_information/src/pages/login/login.config.ts new file mode 100644 index 0000000..9d41d86 --- /dev/null +++ b/collect_information/src/pages/login/login.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '登录', +}) diff --git a/collect_information/src/pages/login/login.scss b/collect_information/src/pages/login/login.scss new file mode 100644 index 0000000..7977430 --- /dev/null +++ b/collect_information/src/pages/login/login.scss @@ -0,0 +1,87 @@ +.SignMultiple { + height: 100vh; + background: #f4f5f7; + position: relative; + + .urlIndex { + display: flex; + justify-content: center; + align-items: center; + padding: 0; + margin: 0; + width: 100%; + height: 440rpx; + background: #3a6bbe; + text-align: center; + overflow: hidden; + + .urlTitle { + width: 100%; + height: 300rpx; + + .urlWelcome { + color: #fff; + font-size: 24px; + } + + .urlHibiscus { + height: 200rpx; + line-height: 58rpx; + //font-size: 38rpx; + margin: 40rpx 20rpx; + border: 2px solid #a1b8e0; + display: flex; + justify-content: center; + + .contact { + height: 100rpx; + width: 100rpx; + border-radius: 50%; + border: solid 1px gray; + + .image { + width: 100%; + height: 100%; + border-radius: 50% + } + } + } + } + } + + .type { + margin: 0 20rpx 0 20rpx; + width: 29%; + text-align: right; + } + + .HiddenEse { + position: absolute; + top: 4px; + right: 0; + width: 76rpx; + height: 40rpx; + + image { + width: 40rpx; + height: 40rpx; + } + } + + .SignItem { + transform: translateY(15%); + display: flex; + flex-direction: column; + margin: 20rpx 48rpx; + border-radius: 20rpx; + } + + .Cancel { + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + margin: 20rpx 40rpx; + } + +} diff --git a/collect_information/src/pages/login/login.vue b/collect_information/src/pages/login/login.vue new file mode 100644 index 0000000..ed09acd --- /dev/null +++ b/collect_information/src/pages/login/login.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/collect_information/src/pages/police/index/index.config.ts b/collect_information/src/pages/police/index/index.config.ts new file mode 100644 index 0000000..a7c25c7 --- /dev/null +++ b/collect_information/src/pages/police/index/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '首页', +}) diff --git a/collect_information/src/pages/police/index/index.scss b/collect_information/src/pages/police/index/index.scss new file mode 100644 index 0000000..650fcb5 --- /dev/null +++ b/collect_information/src/pages/police/index/index.scss @@ -0,0 +1,47 @@ +.swiperDemoItem { + color: #3886d0; + display: flex; + padding: 20px 0 0 50px; + overflow: hidden; + height: 70rpx; + + .swiperDemoIndex { + width: 15px; + height: 45px; + background-image: linear-gradient(to bottom, #5d9cf9, #317ad9); + //background: rgb(); + border-radius: 20px; + margin-right: 15px; + } +} + +.subModule { + display: flex; + align-items: center; + flex-wrap: wrap; + margin-right: -3px; + margin-left: -1px; + + .subModuleItem { + width: 33%; + height: 180rpx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-bottom: 10rpx; + border: 1px solid #ccc; + border-left: 0; + margin-top: -1px; + + .subModuleIndex { + width: 65rpx; + height: 65rpx; + + image { + width: 100%; + height: 100%; + } + } + } +} diff --git a/collect_information/src/pages/police/index/index.vue b/collect_information/src/pages/police/index/index.vue new file mode 100644 index 0000000..9ca7928 --- /dev/null +++ b/collect_information/src/pages/police/index/index.vue @@ -0,0 +1,58 @@ + + diff --git a/collect_information/src/pages/police/mine/index.config.ts b/collect_information/src/pages/police/mine/index.config.ts new file mode 100644 index 0000000..a7c25c7 --- /dev/null +++ b/collect_information/src/pages/police/mine/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '首页', +}) diff --git a/collect_information/src/pages/police/mine/index.scss b/collect_information/src/pages/police/mine/index.scss new file mode 100644 index 0000000..e69de29 diff --git a/collect_information/src/pages/police/mine/index.vue b/collect_information/src/pages/police/mine/index.vue new file mode 100644 index 0000000..d00e9e3 --- /dev/null +++ b/collect_information/src/pages/police/mine/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/collect_information/src/pages/projectManager/index/index.config.ts b/collect_information/src/pages/projectManager/index/index.config.ts new file mode 100644 index 0000000..a7c25c7 --- /dev/null +++ b/collect_information/src/pages/projectManager/index/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '首页', +}) diff --git a/collect_information/src/pages/projectManager/index/index.scss b/collect_information/src/pages/projectManager/index/index.scss new file mode 100644 index 0000000..b802829 --- /dev/null +++ b/collect_information/src/pages/projectManager/index/index.scss @@ -0,0 +1,48 @@ +.swiperDemoItem { + color: #3886d0; + display: flex; + padding: 20px 0 0 50px; + overflow: hidden; + height: 70rpx; + + .swiperDemoIndex { + width: 15px; + height: 45px; + background-image: linear-gradient(to bottom, #5d9cf9, #317ad9); + //background: rgb(); + border-radius: 20px; + margin-right: 15px; + } +} + +.subModule { + display: flex; + align-items: center; + flex-wrap: wrap; + margin-right: -3px; + margin-left: -1px; + + .subModuleItem { + width: 33%; + height: 180rpx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-bottom: 10rpx; + border: 1px solid #ccc; + border-left: 0; + margin-top: -1px; + + .subModuleIndex { + width: 65rpx; + height: 65rpx; + + image { + width: 100%; + height: 100%; + } + } + } +} + diff --git a/collect_information/src/pages/projectManager/index/index.vue b/collect_information/src/pages/projectManager/index/index.vue new file mode 100644 index 0000000..7455202 --- /dev/null +++ b/collect_information/src/pages/projectManager/index/index.vue @@ -0,0 +1,58 @@ + + diff --git a/collect_information/src/pages/projectManager/mine/index.config.ts b/collect_information/src/pages/projectManager/mine/index.config.ts new file mode 100644 index 0000000..b4d3feb --- /dev/null +++ b/collect_information/src/pages/projectManager/mine/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '我的', +}) diff --git a/collect_information/src/pages/projectManager/mine/index.scss b/collect_information/src/pages/projectManager/mine/index.scss new file mode 100644 index 0000000..e69de29 diff --git a/collect_information/src/pages/projectManager/mine/index.vue b/collect_information/src/pages/projectManager/mine/index.vue new file mode 100644 index 0000000..55e8097 --- /dev/null +++ b/collect_information/src/pages/projectManager/mine/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/collect_information/src/pages/register/register.config.ts b/collect_information/src/pages/register/register.config.ts new file mode 100644 index 0000000..1c854c8 --- /dev/null +++ b/collect_information/src/pages/register/register.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '注册' +}) diff --git a/collect_information/src/pages/register/register.scss b/collect_information/src/pages/register/register.scss new file mode 100644 index 0000000..d3ec4b4 --- /dev/null +++ b/collect_information/src/pages/register/register.scss @@ -0,0 +1,43 @@ +.register { + height: 100vh; +} + +.nut-cell-group__wrap { + margin: 0; +} + +.registerIndex { + width: 100%; +} + +.registerBtn { + margin-top: 40rpx; + padding: 0 20px; +} + +.buttonChoose { + margin: 0; + border: none; + background: transparent; + outline: none; + padding: 0; + height: 90rpx; + width: 90rpx; + border-radius: 50%; +} + +.nickNameInput{ + color: black; +} + +.contact { + height: 83rpx; + width: 83rpx; + border-radius: 50%; + border: solid 1px gray; + + .image { + width: 100%; + height: 100%; + } +} diff --git a/collect_information/src/pages/register/register.vue b/collect_information/src/pages/register/register.vue new file mode 100644 index 0000000..0368d69 --- /dev/null +++ b/collect_information/src/pages/register/register.vue @@ -0,0 +1,220 @@ + + diff --git a/collect_information/src/request/index.ts b/collect_information/src/request/index.ts new file mode 100644 index 0000000..5095fd2 --- /dev/null +++ b/collect_information/src/request/index.ts @@ -0,0 +1,100 @@ +import Taro from "@tarojs/taro"; +import {ApiOptions} from "@/types/request"; +import {useUserStore} from "@/store/userStore"; + + +/** + * 请求拦截器 + * @param chain + */ +const requestInterceptor = (chain: Taro.Chain) => { + const requestParams = chain.requestParams + const tokenInfo = useUserStore().getTokenInfo() + const {header} = requestParams; + const customHeader: Record = {} + //添加token + tokenInfo && (customHeader[tokenInfo.name] = tokenInfo.value); + requestParams.header = { + ...header, + ...customHeader + } + return chain.proceed(requestParams) +} + +//所有的拦截器 +const interceptors = [requestInterceptor]; +//注册拦截器 +interceptors.forEach((interceptorItem) => Taro.addInterceptor(interceptorItem)); + +class CustomRequest { + BASE_API: string = process.env.TARO_APP_BASE_API; + + private request(url: string, method: keyof Taro.request.Method, options: ApiOptions, params?: object,): Promise> { + return new Promise>((resolve, reject) => { + if (options.loading) { + Taro.showLoading({ + title: '请求中...', + }).then() + } + Taro.request, object>({ + url: this.BASE_API + url, + data: params, + method, + ...options, + success: (result) => { + Taro.hideLoading() + if (result.header['Content-Type'] === 'application/octet-stream') { + resolve(result.data) + return + } + const jsonResult = result.data + if (jsonResult.code !== 200) { + if ([401].includes(jsonResult.code)) { + // 重新登录 跳转登录页 提示错误 + } + Taro.showToast({ + title: jsonResult.message, + icon: 'none', + mask: true, + duration: 2000 + }).then() + reject(jsonResult); + } else { + resolve(jsonResult); + } + }, + fail: (res) => { + Taro.hideLoading() + Taro.showToast({ + title: res.errMsg, + icon: 'none', + mask: true, + duration: 2000 + }).then() + reject(res.errMsg); + } + }) + }) + } + + get(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + return this.request(url, "GET", options, params) + } + + post(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + return this.request(url, "POST", options, params) + } + + delete(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + return this.request(url, "DELETE", options, params) + } + + put(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + return this.request(url, "PUT", options, params) + } + +} + +const api = new CustomRequest(); + +export default api diff --git a/collect_information/src/store/index.ts b/collect_information/src/store/index.ts new file mode 100644 index 0000000..e917126 --- /dev/null +++ b/collect_information/src/store/index.ts @@ -0,0 +1,3 @@ +import {createPinia} from 'pinia' + +export const pinia = createPinia() diff --git a/collect_information/src/store/tabBarStore.ts b/collect_information/src/store/tabBarStore.ts new file mode 100644 index 0000000..accf8c3 --- /dev/null +++ b/collect_information/src/store/tabBarStore.ts @@ -0,0 +1,14 @@ +import {defineStore} from "pinia"; +import {ref} from "vue"; + +export const useTabBarStore = defineStore('tabBar', () => { + const selected = ref(0) + const setSelected = (index: number) => { + selected.value = index; + } + + return { + selected, + setSelected + } +}) diff --git a/collect_information/src/store/userStore.ts b/collect_information/src/store/userStore.ts new file mode 100644 index 0000000..2dafcb3 --- /dev/null +++ b/collect_information/src/store/userStore.ts @@ -0,0 +1,40 @@ +import {defineStore} from "pinia"; +import {ref} from "vue"; +import Taro from "@tarojs/taro"; + +export const useUserStore = defineStore('userStore', () => { + /** 获取token信息 **/ + const getTokenInfo = (): TokenInfo | null => { + const ti = Taro.getStorageSync('tokenInfo') + // 如果 ti 存在且不是空字符串,则返回 ti,否则返回 null + return (ti !== undefined && ti !== null && ti !== '') ? ti : null; + } + /** 用户token信息 **/ + const tokenInfo = ref(getTokenInfo()) + /** 保存token信息 **/ + const saveTokenInfo = (t: TokenInfo) => { + tokenInfo.value = t; + Taro.setStorageSync('tokenInfo', tokenInfo.value) + } + /** 清楚token信息 */ + const clearTokenInfo = () => { + tokenInfo.value = null + Taro.removeStorageSync('tokenInfo') + } + + + /** + * 重置用户数据 + * 一般用于用户退出登录 重置所有相关数据 + */ + const resetUserInfo = () => { + clearTokenInfo() + } + + return { + tokenInfo, + saveTokenInfo, + getTokenInfo, + resetUserInfo + } +}) diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.scss b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.scss new file mode 100644 index 0000000..1cab77b --- /dev/null +++ b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.scss @@ -0,0 +1,34 @@ +page { + background-color: #f0f0f0; +} + +.myProject { + .myProjectItem { + margin: 20px; + border-radius: 10px; + background: #ffffff; + padding: 15px; + font-size: 28px; + line-height: 50px; + color: #333333; + + .myProjectIndex { + color: #9b9b9f; + } + + .project { + display: flex; + justify-content: space-between; + flex-flow: wrap; + text-align: center; + + view { + width: 45%; + height: 100rpx; + border: 1px solid #cccccc; + line-height: 100rpx; + margin: 8px 0 8px 0; + } + } + } +} diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.ts b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.ts new file mode 100644 index 0000000..db6b2a1 --- /dev/null +++ b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '企事业单位', +}) diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.vue b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.vue new file mode 100644 index 0000000..b1cb95e --- /dev/null +++ b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.vue @@ -0,0 +1,46 @@ + + + diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.scss b/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.scss new file mode 100644 index 0000000..ef412c6 --- /dev/null +++ b/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.scss @@ -0,0 +1,79 @@ +.projectDetails { + height: 100vh; + overflow: hidden; + background: #f1f1f1; + display: flex; + flex-direction: column; + + .projectDetailsItem { + margin: 10px 20px 10px 20px; + border-radius: 10px; + background: #ffffff; + padding: 15px; + font-size: 28px; + line-height: 65px; + color: #333333; + + .projectDetailsIndex { + display: flex; + flex-wrap: wrap; + line-height: 44rpx; + margin-bottom: 20px; + + .content { + color: #9b9b9f; + } + } + } + + .projectDetailsTableDrop { + height: 80%; + + .projectDetailsTable { + margin: 20px; + border-radius: 10px; + background: #ffffff; + padding: 15px; + font-size: 28px; + line-height: 50px; + color: #333333; + + .projectDetailsTableItem { + //display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + font-size: 24px; + margin-bottom: 15px; + + .projectDetailsTableIndex { + display: flex; + justify-content: flex-end; + text-align: center; + + view { + width: 70px; + margin-right: 20px; + } + } + } + } + } + + .projectDetailsButton { + position: fixed; + bottom: 19px; + display: flex; + -webkit-justify-content: space-around; + margin-bottom: 10rpx; + right: 0; + width: 100%; + } + + .nutPopup { + width: 300px; + height: 100px; + display: flex; + flex-wrap: wrap; + } +} diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.ts b/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.ts new file mode 100644 index 0000000..463c9fb --- /dev/null +++ b/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '项目详情', +}) diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.vue b/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.vue new file mode 100644 index 0000000..b68a6cc --- /dev/null +++ b/collect_information/src/subPages/police/myEnterprisesUnit/projectDetails/projectDetails.vue @@ -0,0 +1,143 @@ + + diff --git a/collect_information/src/subPages/projectManager/myProject/myProject.scss b/collect_information/src/subPages/projectManager/myProject/myProject.scss new file mode 100644 index 0000000..d94d1d9 --- /dev/null +++ b/collect_information/src/subPages/projectManager/myProject/myProject.scss @@ -0,0 +1,35 @@ +.myProject { + height: 100vh; + overflow: hidden; + background: #f1f1f1; + + .myProjectItem { + //height: 20%; + margin: 20px; + border-radius: 10px; + background: #ffffff; + padding: 15px; + font-size: 28px; + line-height: 50px; + color: #333333; + + .myProjectIndex { + color: #9b9b9f; + } + + .project { + display: flex; + justify-content: space-between; + flex-flow: wrap; + text-align: center; + + view { + width: 45%; + height: 100rpx; + border: 1px solid #cccccc; + line-height: 100rpx; + margin: 8px 0 8px 0; + } + } + } +} diff --git a/collect_information/src/subPages/projectManager/myProject/myProject.ts b/collect_information/src/subPages/projectManager/myProject/myProject.ts new file mode 100644 index 0000000..7d4dae7 --- /dev/null +++ b/collect_information/src/subPages/projectManager/myProject/myProject.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '我的项目', +}) diff --git a/collect_information/src/subPages/projectManager/myProject/myProject.vue b/collect_information/src/subPages/projectManager/myProject/myProject.vue new file mode 100644 index 0000000..8cdf561 --- /dev/null +++ b/collect_information/src/subPages/projectManager/myProject/myProject.vue @@ -0,0 +1,56 @@ + + + diff --git a/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.scss b/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.scss new file mode 100644 index 0000000..acb1441 --- /dev/null +++ b/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.scss @@ -0,0 +1,105 @@ +.projectDetails { + height: 100vh; + overflow: hidden; + background: #f1f1f1; + display: flex; + flex-direction: column; + + .projectDetailsItem { + margin: 10px 20px 10px 20px; + border-radius: 10px; + background: #ffffff; + padding: 15px; + font-size: 28px; + line-height: 65px; + color: #333333; + + .projectDetailsIndex { + display: flex; + flex-wrap: wrap; + line-height: 44rpx; + margin-bottom: 20px; + + .content { + color: #9b9b9f; + } + } + } + + .projectDetailsTableDrop { + height: 80%; + + .projectDetailsTable { + margin: 20px; + border-radius: 10px; + background: #ffffff; + padding: 15px; + font-size: 28px; + line-height: 50px; + color: #333333; + + .projectDetailsTableItem { + //display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + font-size: 24px; + margin-bottom: 15px; + + .projectDetailsTableIndex { + display: flex; + justify-content: flex-end; + text-align: center; + + view { + width: 70px; + margin-right: 20px; + } + } + } + } + } + + .projectDetailsButton { + position: fixed; + bottom: 19px; + display: flex; + -webkit-justify-content: space-around; + margin-bottom: 10rpx; + right: 0; + width: 100%; + } + + .nutPopup { + width: 300px; + height: 100px; + display: flex; + flex-wrap: wrap; + } + + .qrcodeVisibleUrl { + margin-bottom: 5px; + + image { + width: 100%; + } + } + + .warp { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; + + .warpItem { + width: 90%; + height: 50%; + text-align: center; + + .rect { + width: 100%; + height: 100%; + } + } + } +} diff --git a/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.ts b/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.ts new file mode 100644 index 0000000..463c9fb --- /dev/null +++ b/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '项目详情', +}) diff --git a/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.vue b/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.vue new file mode 100644 index 0000000..5d45301 --- /dev/null +++ b/collect_information/src/subPages/projectManager/myProject/projectDetails/projectDetails.vue @@ -0,0 +1,274 @@ + + + + diff --git a/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.scss b/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.scss new file mode 100644 index 0000000..4dd980a --- /dev/null +++ b/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.scss @@ -0,0 +1,8 @@ +.form { + .formButton { + display: flex; + margin-top: auto; + justify-content: space-around; + margin-bottom: 30px + } +} diff --git a/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.ts b/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.ts new file mode 100644 index 0000000..65ce4c0 --- /dev/null +++ b/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '项目人员录入', +}) diff --git a/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.vue b/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.vue new file mode 100644 index 0000000..98dadd5 --- /dev/null +++ b/collect_information/src/subPages/projectManager/securityUserForm/securityUserForm.vue @@ -0,0 +1,159 @@ + + diff --git a/collect_information/src/utils/index.ts b/collect_information/src/utils/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/collect_information/tsconfig.json b/collect_information/tsconfig.json new file mode 100644 index 0000000..91cfcd5 --- /dev/null +++ b/collect_information/tsconfig.json @@ -0,0 +1,39 @@ +{ + "compilerOptions": { + "target": "es2017", + "module": "commonjs", + "removeComments": false, + "preserveConstEnums": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "noImplicitAny": false, + "allowSyntheticDefaultImports": true, + "outDir": "lib", + "noUnusedLocals": true, + "noUnusedParameters": true, + "strictNullChecks": true, + "sourceMap": true, + "rootDir": ".", + "jsx": "preserve", + "allowJs": true, + "resolveJsonModule": true, + "typeRoots": [ + "node_modules/@types" + ], + "paths": { + // TS5090 leading './' + "@/*": [ + "./src/*" + ], + "@/types/*": [ + "./types/*" + ] + } + }, + "include": [ + "./src", + "./types", + "./config" + ], + "compileOnSave": false +} diff --git a/collect_information/types/config/index.ts b/collect_information/types/config/index.ts new file mode 100644 index 0000000..4069599 --- /dev/null +++ b/collect_information/types/config/index.ts @@ -0,0 +1,8 @@ +import Taro from "@tarojs/taro"; + +export interface UserConfig { + /** 跳转的首页地址 **/ + toIndex: string; + /** 身份对应的tabBar列表 **/ + tabBarList: Taro.TabBarItem[] +} diff --git a/collect_information/types/global.d.ts b/collect_information/types/global.d.ts new file mode 100644 index 0000000..e769f68 --- /dev/null +++ b/collect_information/types/global.d.ts @@ -0,0 +1,104 @@ +/// + +declare module '*.png'; +declare module '*.gif'; +declare module '*.jpg'; +declare module '*.jpeg'; +declare module '*.svg'; +declare module '*.css'; +declare module '*.less'; +declare module '*.scss'; +declare module '*.sass'; +declare module '*.styl'; + +declare namespace NodeJS { + interface ProcessEnv { + /** NODE 内置环境变量, 会影响到最终构建生成产物 */ + NODE_ENV: 'development' | 'production', + /** 当前构建的平台 */ + TARO_ENV: 'weapp' | 'swan' | 'alipay' | 'h5' | 'rn' | 'tt' | 'quickapp' | 'qq' | 'jd' + /** + * 当前构建的小程序 appid + * @description 若不同环境有不同的小程序,可通过在 env 文件中配置环境变量`TARO_APP_ID`来方便快速切换 appid, 而不必手动去修改 dist/project.config.json 文件 + * @see https://taro-docs.jd.com/docs/next/env-mode-config#特殊环境变量-taro_app_id + */ + TARO_APP_ID: string + /** 后台服务接口地址 **/ + TARO_APP_BASE_API: string + } +} + +declare module '@tarojs/components' { + export * from '@tarojs/components/types/index.vue3' +} + +/** + * 微信小程序用户身份 + */ +type MiniProgramUserIdentity = 'police' | 'project_manager' + +/** + * 选择 + */ +interface SelectNodeVo> { + value: T; + label: string; + orderIndex?: number; + disabled?: boolean; + extData?: E +} + +/** + * 树 + */ +interface TreeNodeVo> { + value: T; + parentValue: T; + label: string; + orderIndex?: number; + children?: TreeNodeVo[] + extData?: E; +} + +/** + * 全局状态返回 + */ +interface JsonResult { + code: number; + data?: T; + message: string; +} + +/** + * 分页对象 + */ +interface PagerVo { + size: number, + total: number; + current: number; + records: T[] +} + +/** + * token信息 + */ +interface TokenInfo { + /** token名称 **/ + name: string; + /** token值 **/ + value: string; + /** 拓展属性 **/ + extData: { + /** 身份 **/ + identity: BaseEnum + } +} + +/** + * 基本枚举类型 + */ +interface BaseEnum> { + value: T; + label: string; + extData: E; +} diff --git a/collect_information/types/pages/register/index.ts b/collect_information/types/pages/register/index.ts new file mode 100644 index 0000000..b840184 --- /dev/null +++ b/collect_information/types/pages/register/index.ts @@ -0,0 +1,8 @@ +export interface RegisterParams { + avatar: string; + name: string; + sex: number, + telephone: string, + identity: string; + unitId: string +} diff --git a/collect_information/types/request/index.ts b/collect_information/types/request/index.ts new file mode 100644 index 0000000..fb99bfd --- /dev/null +++ b/collect_information/types/request/index.ts @@ -0,0 +1,5 @@ +import Taro from "@tarojs/taro"; + +export interface ApiOptions extends Omit { + loading?: boolean; +} diff --git a/collect_information/types/subPages/projectManager/myProject/index.ts b/collect_information/types/subPages/projectManager/myProject/index.ts new file mode 100644 index 0000000..bfeba41 --- /dev/null +++ b/collect_information/types/subPages/projectManager/myProject/index.ts @@ -0,0 +1,61 @@ +export interface MyProjectList { + item?: any, + address?: string; + city?: string; + cityName?: string; + contactPersonInfo: ContactPersonInfo; + districts?: string; + districtsName?: string; + name: string; + province?: string; + provinceName: string; + remark?: string; + serviceProjectList: ServiceProjectList[]; + snowFlakeId?: string; + securityUnitId: string; + street?: string; + streetName?: string; +} + +export interface ContactPersonInfo { + name: string; + telephone: string +} + +export interface ServiceProjectList { + buildingTotal?: number; + houseTotal?: number; + idNumber?: string; + isRecruitSecurity?: null; + name?: string; + remark?: string; + securityUserTotal?: number; + serviceArea?: number; + snowFlakeId?: string; + staffTotal?: number; + type?: string; + projectManagerMiniProgramUserInfo?: ProgramUserInfo +} + +export interface ProgramUserInfo { + idCard: null + name: string + telephone: string +} + +export interface ServiceProjectSecurityUserPagerVo { + createTime?: string; + dateOfBirth?: string; + homeAddress?: string; + idCard?: string; + name?: string; + nativePlace?: string; + remark?: string; + securityNumber?: string; + securityUnitId?: string; + securityUnitName?: string; + serviceProjectId?: string; + snowFlakeId: string; + workPost?: string; + sex: BaseEnum +} diff --git a/collect_information/types/subPages/projectManager/securityUserForm/index.ts b/collect_information/types/subPages/projectManager/securityUserForm/index.ts new file mode 100644 index 0000000..e02bb69 --- /dev/null +++ b/collect_information/types/subPages/projectManager/securityUserForm/index.ts @@ -0,0 +1,15 @@ +export interface SecurityUserFormParams { + snowFlakeId?: string; + securityUnitId: string; + serviceProjectId: string; + name?: string; + workPost?: string; + telephone?: string; + sex: number; + nativePlace?: string; + idCard: string; + dateOfBirth?: Date | null; + securityNumber?: string; + remark?: string; + homeAddress?: string +} diff --git a/collect_information/types/vue.d.ts b/collect_information/types/vue.d.ts new file mode 100644 index 0000000..a97867d --- /dev/null +++ b/collect_information/types/vue.d.ts @@ -0,0 +1,10 @@ +export {} + +declare module 'vue' { + export interface GlobalComponents extends JSX.IntrinsicElements { + /** Note: Vue 在 runtime 中将 JSX.IntrinsicElements 通过 index signature 重复声明标签 + * 这会导致插件无法正常跳转类型,可以手动覆盖声明标签活得更好的体验,参考如下: + * 'scroll-view': JSX.IntrinsicElements['scroll-view'] + */ + } +}