From bcde6a1839f9b02dd8c8d55d94f5925c9b72154a Mon Sep 17 00:00:00 2001
From: wangyilin <1454641981@qq.com>
Date: Tue, 10 Sep 2024 10:59:29 +0800
Subject: [PATCH 1/8] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/components/layout/layout.vue | 4 +--
.../src/types/views/enterprise.ts | 15 ++++++++++
securityManagement/src/views/enterprise.vue | 29 ++++---------------
.../src/views/serviceManagement/index.vue | 19 +++++++++++-
4 files changed, 41 insertions(+), 26 deletions(-)
diff --git a/securityManagement/src/components/layout/layout.vue b/securityManagement/src/components/layout/layout.vue
index 09ce243..682ed00 100644
--- a/securityManagement/src/components/layout/layout.vue
+++ b/securityManagement/src/components/layout/layout.vue
@@ -7,10 +7,10 @@
collapsible
>
-
+
diff --git a/securityManagement/src/types/views/enterprise.ts b/securityManagement/src/types/views/enterprise.ts
index e69de29..e8bdb4b 100644
--- a/securityManagement/src/types/views/enterprise.ts
+++ b/securityManagement/src/types/views/enterprise.ts
@@ -0,0 +1,15 @@
+export interface formDatePort {
+ name:string,
+ socialCode:string,
+ businessLicense:string,
+ legalPersonInfo:string,
+ telephone:string,
+ administrativeDivisionCodes:Record,
+ address:string,
+ nature:string
+}
+
+export interface statusPort {
+ onlyCode:string,
+ unitOptType:string
+}
\ No newline at end of file
diff --git a/securityManagement/src/views/enterprise.vue b/securityManagement/src/views/enterprise.vue
index 8c86b33..2b04a73 100644
--- a/securityManagement/src/views/enterprise.vue
+++ b/securityManagement/src/views/enterprise.vue
@@ -27,11 +27,11 @@
-
+
-
+
@@ -76,42 +76,25 @@ import api from "@/axios";
import {message, Modal} from 'ant-design-vue';
import SingleImageFileUpload from "@/components/upload/SingleImageFileUpload.vue";
import {useRouter} from "vue-router";
+import {formDatePort, statusPort} from "@/types/views/enterprise.ts";
const activeKey = ref('1');
const labelCol = { style: { width: '120px' } };
const wrapperCol = { span: 14 };
const administrativeDivisionTree = ref[]>([])
const formDateRef = ref();
-
+const fileUpload = ref()
const router = useRouter()
-
-interface formDatePort {
- name:string,
- socialCode:string,
- businessLicense:string,
- legalPersonInfo:string,
- telephone:string,
- administrativeDivisionCodes:Record,
- address:string,
- nature:string
-}
-
-interface statusPort {
- onlyCode:string,
- unitOptType:string
-}
-
const formDate = ref({
name:'',
socialCode:'',
businessLicense:'',
legalPersonInfo:'',
telephone:'',
- administrativeDivisionCodes:[''],
+ administrativeDivisionCodes:undefined,
address:'',
nature:''
})
-
const statusDate = ref({
onlyCode:'',
unitOptType:'SECURITY_UNIT'
@@ -177,7 +160,7 @@ const onFinish = async ()=>{
businessLicense:'',
legalPersonInfo:'',
telephone:'',
- administrativeDivisionCodes:[''],
+ administrativeDivisionCodes:undefined,
address:'',
nature:''
}
diff --git a/securityManagement/src/views/serviceManagement/index.vue b/securityManagement/src/views/serviceManagement/index.vue
index d28a2e0..dd9a46c 100644
--- a/securityManagement/src/views/serviceManagement/index.vue
+++ b/securityManagement/src/views/serviceManagement/index.vue
@@ -52,7 +52,8 @@ const searchFormOptions: TableProps["searchFormOptions"] = {
},
projectManagerMiniProgramUserName:{
type: 'input',
- label: '服务经理用户名称'
+ label: '服务经理用户名称',
+
},
remark: {
type: 'input',
@@ -77,6 +78,7 @@ const formParams = ref<{
enterprisesUnitId:string,
administrativeDivisionCodes?:null,
projectManagerMiniProgramUserId?:string,
+ projectManagerMiniProgramUserName?:string
name: string,
type:string,
isRecruitSecurity:number,
@@ -204,6 +206,7 @@ const columns: TableProps['columns'] = [
idNumberDisabled.value = true
}
}
+ formParams.value.projectManagerMiniProgramUserId = record.projectManagerMiniProgramUserName
formParams.value.snowFlakeId = record.snowFlakeId
formParams.value.name = record.name
formParams.value.type = record.type.value
@@ -232,6 +235,13 @@ const getAdministrativeDivisionTree = async ()=>{
administrativeDivisionTree.value = resp.data as TreeNodeVo[]
}
+// 项目经理接口
+const userNameOptions = ref([])
+const projectManagerMiniProgram = async()=>{
+ const resp = await api.get('/securityUnit/listProjectManager')
+ userNameOptions.value = resp.data as any
+}
+
// 企事业单位接口
const enterprisesUnitIdList = ref[]>([])
const enterprisesUnitId = ref('')
@@ -244,6 +254,11 @@ const formItemOptions = ref{
const serviceProjectSaveOrUpdateParams = {
snowFlakeId: snowFlakeId.value,
enterprisesUnitId:UnitId.value,
+ projectManagerMiniProgramUserId:formParams.value.projectManagerMiniProgramUserId,
name: formParams.value.name,
type:formParams.value.type,
isRecruitSecurity:formParams.value.isRecruitSecurity,
@@ -411,6 +427,7 @@ const addServiceProjects = () => {
onMounted(async ()=>{
await getAdministrativeDivisionTree()
+ await projectManagerMiniProgram()
})
From ed8d12bf29d79209ea24b3622d93122cb5efdf8e Mon Sep 17 00:00:00 2001
From: wangyilin <1454641981@qq.com>
Date: Tue, 10 Sep 2024 11:00:20 +0800
Subject: [PATCH 2/8] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
collect_information/.editorconfig | 12 +
collect_information/.env.development | 2 +
collect_information/.env.production | 2 +
collect_information/.env.test | 1 +
collect_information/.eslintrc | 10 +
collect_information/.gitignore | 12 +
collect_information/__tests__/index.test.js | 12 +
collect_information/babel.config.js | 10 +
collect_information/config/dev.ts | 9 +
collect_information/config/index.ts | 114 +++++++
collect_information/config/prod.ts | 32 ++
collect_information/jest.config.ts | 6 +
collect_information/package.json | 95 ++++++
collect_information/project.config.json | 31 ++
.../project.private.config.json | 55 ++++
collect_information/project.tt.json | 9 +
collect_information/src/app.config.ts | 38 +++
collect_information/src/app.scss | 4 +
collect_information/src/app.ts | 15 +
.../src/assets/images/arrow.png | Bin 0 -> 13786 bytes
.../src/assets/images/badge.jpg | Bin 0 -> 396263 bytes
.../src/assets/images/banner.jpg | Bin 0 -> 12150 bytes
.../src/assets/mine/my-active.png | Bin 0 -> 520 bytes
collect_information/src/assets/mine/my.png | Bin 0 -> 501 bytes
.../src/assets/mine/punch-active.png | Bin 0 -> 565 bytes
collect_information/src/assets/mine/punch.png | Bin 0 -> 416 bytes
.../src/assets/scss/colorui.scss | 308 ++++++++++++++++++
.../form/PersonnelInformationEntryForm.vue | 225 +++++++++++++
collect_information/src/enums/index.ts | 30 ++
collect_information/src/index.html | 17 +
.../pages/employeeInfo/employeeInfo.config.ts | 4 +
.../src/pages/employeeInfo/employeeInfo.scss | 2 +
.../src/pages/employeeInfo/employeeInfo.vue | 21 ++
.../src/pages/index/index.config.ts | 4 +
.../src/pages/index/index.scss | 0
collect_information/src/pages/index/index.vue | 22 ++
.../src/pages/login/login.config.ts | 3 +
.../src/pages/login/login.scss | 0
collect_information/src/pages/login/login.vue | 16 +
.../src/pages/mine/mine.config.ts | 5 +
collect_information/src/pages/mine/mine.scss | 84 +++++
collect_information/src/pages/mine/mine.vue | 17 +
.../src/pages/register/register.config.ts | 3 +
.../src/pages/register/register.scss | 43 +++
.../src/pages/register/register.vue | 212 ++++++++++++
collect_information/src/request/index.ts | 86 +++++
collect_information/src/store/index.ts | 11 +
collect_information/src/store/userStore.ts | 0
collect_information/src/utils/index.ts | 67 ++++
collect_information/tsconfig.json | 27 ++
collect_information/types/global.d.ts | 62 ++++
.../types/pages/index/index.d.ts | 39 +++
.../types/pages/login/index.d.ts | 4 +
.../types/pages/register/index.d.ts | 8 +
collect_information/types/request/index.d.ts | 9 +
collect_information/types/vue.d.ts | 10 +
56 files changed, 1808 insertions(+)
create mode 100644 collect_information/.editorconfig
create mode 100644 collect_information/.env.development
create mode 100644 collect_information/.env.production
create mode 100644 collect_information/.env.test
create mode 100644 collect_information/.eslintrc
create mode 100644 collect_information/.gitignore
create mode 100644 collect_information/__tests__/index.test.js
create mode 100644 collect_information/babel.config.js
create mode 100644 collect_information/config/dev.ts
create mode 100644 collect_information/config/index.ts
create mode 100644 collect_information/config/prod.ts
create mode 100644 collect_information/jest.config.ts
create mode 100644 collect_information/package.json
create mode 100644 collect_information/project.config.json
create mode 100644 collect_information/project.private.config.json
create mode 100644 collect_information/project.tt.json
create mode 100644 collect_information/src/app.config.ts
create mode 100644 collect_information/src/app.scss
create mode 100644 collect_information/src/app.ts
create mode 100644 collect_information/src/assets/images/arrow.png
create mode 100644 collect_information/src/assets/images/badge.jpg
create mode 100644 collect_information/src/assets/images/banner.jpg
create mode 100644 collect_information/src/assets/mine/my-active.png
create mode 100644 collect_information/src/assets/mine/my.png
create mode 100644 collect_information/src/assets/mine/punch-active.png
create mode 100644 collect_information/src/assets/mine/punch.png
create mode 100644 collect_information/src/assets/scss/colorui.scss
create mode 100644 collect_information/src/components/form/PersonnelInformationEntryForm.vue
create mode 100644 collect_information/src/enums/index.ts
create mode 100644 collect_information/src/index.html
create mode 100644 collect_information/src/pages/employeeInfo/employeeInfo.config.ts
create mode 100644 collect_information/src/pages/employeeInfo/employeeInfo.scss
create mode 100644 collect_information/src/pages/employeeInfo/employeeInfo.vue
create mode 100644 collect_information/src/pages/index/index.config.ts
create mode 100644 collect_information/src/pages/index/index.scss
create mode 100644 collect_information/src/pages/index/index.vue
create mode 100644 collect_information/src/pages/login/login.config.ts
create mode 100644 collect_information/src/pages/login/login.scss
create mode 100644 collect_information/src/pages/login/login.vue
create mode 100644 collect_information/src/pages/mine/mine.config.ts
create mode 100644 collect_information/src/pages/mine/mine.scss
create mode 100644 collect_information/src/pages/mine/mine.vue
create mode 100644 collect_information/src/pages/register/register.config.ts
create mode 100644 collect_information/src/pages/register/register.scss
create mode 100644 collect_information/src/pages/register/register.vue
create mode 100644 collect_information/src/request/index.ts
create mode 100644 collect_information/src/store/index.ts
create mode 100644 collect_information/src/store/userStore.ts
create mode 100644 collect_information/src/utils/index.ts
create mode 100644 collect_information/tsconfig.json
create mode 100644 collect_information/types/global.d.ts
create mode 100644 collect_information/types/pages/index/index.d.ts
create mode 100644 collect_information/types/pages/login/index.d.ts
create mode 100644 collect_information/types/pages/register/index.d.ts
create mode 100644 collect_information/types/request/index.d.ts
create mode 100644 collect_information/types/vue.d.ts
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..f811773
--- /dev/null
+++ b/collect_information/.env.development
@@ -0,0 +1,2 @@
+TARO_APP_ID="wx8902ddbfddb820d1"
+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..bf2df6e
--- /dev/null
+++ b/collect_information/.env.production
@@ -0,0 +1,2 @@
+TARO_APP_ID="wx24cc8a872b57ac79"
+TARO_APP_BASE_API="http://172.10.10.207:7000"
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..a5306c7
--- /dev/null
+++ b/collect_information/.eslintrc
@@ -0,0 +1,10 @@
+// ESLint 检查 .vue 文件需要单独配置编辑器:
+// https://eslint.vuejs.org/user-guide/#editor-integrations
+{
+ "extends": [
+ "taro/vue3"
+ ],
+ "rules": {
+ "vue/multi-word-component-names": "off"
+ }
+}
diff --git a/collect_information/.gitignore b/collect_information/.gitignore
new file mode 100644
index 0000000..f54f355
--- /dev/null
+++ b/collect_information/.gitignore
@@ -0,0 +1,12 @@
+dist/
+deploy_versions/
+.temp/
+.rn_temp/
+node_modules/
+.DS_Store
+.swc
+yarn.lock
+components.d.ts
+package-lock.json
+.vscode
+.idea
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..54a4b61
--- /dev/null
+++ b/collect_information/config/index.ts
@@ -0,0 +1,114 @@
+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-4-12',
+ 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',
+ 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..69bd40f
--- /dev/null
+++ b/collect_information/package.json
@@ -0,0 +1,95 @@
+{
+ "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/icons-vue-taro": "^0.0.9",
+ "@nutui/nutui-taro": "^4.3.5",
+ "@tarojs/components": "3.6.25",
+ "@tarojs/helper": "3.6.25",
+ "@tarojs/plugin-framework-vue3": "3.6.25",
+ "@tarojs/plugin-html": "^3.6.26",
+ "@tarojs/plugin-platform-alipay": "3.6.25",
+ "@tarojs/plugin-platform-h5": "3.6.25",
+ "@tarojs/plugin-platform-harmony-hybrid": "3.6.25",
+ "@tarojs/plugin-platform-jd": "3.6.25",
+ "@tarojs/plugin-platform-qq": "3.6.25",
+ "@tarojs/plugin-platform-swan": "3.6.25",
+ "@tarojs/plugin-platform-tt": "3.6.25",
+ "@tarojs/plugin-platform-weapp": "3.6.25",
+ "@tarojs/runtime": "3.6.25",
+ "@tarojs/shared": "3.6.25",
+ "@tarojs/taro": "3.6.25",
+ "dayjs": "^1.11.10",
+ "pinia": "^2.1.7",
+ "vue": "^3.0.0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.8.0",
+ "@nutui/auto-import-resolver": "^1.0.0",
+ "@tarojs/cli": "3.6.25",
+ "@tarojs/taro-loader": "3.6.25",
+ "@tarojs/test-utils-vue3": "^0.1.1",
+ "@tarojs/webpack5-runner": "3.6.25",
+ "@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.25",
+ "css-loader": "3.4.2",
+ "eslint": "^8.12.0",
+ "eslint-config-taro": "3.6.25",
+ "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.26.0",
+ "vue-loader": "^17.0.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..ab4365c
--- /dev/null
+++ b/collect_information/project.config.json
@@ -0,0 +1,31 @@
+{
+ "miniprogramRoot": "dist/",
+ "projectname": "collect_information",
+ "description": "智慧派出所信息采集小程序",
+ "setting": {
+ "urlCheck": false,
+ "es6": false,
+ "enhance": false,
+ "compileHotReLoad": false,
+ "postcss": false,
+ "minified": false,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "ignoreUploadUnusedFiles": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "3.5.0",
+ "srcMiniprogramRoot": "dist/",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ }
+}
\ No newline at end of file
diff --git a/collect_information/project.private.config.json b/collect_information/project.private.config.json
new file mode 100644
index 0000000..3abd2fd
--- /dev/null
+++ b/collect_information/project.private.config.json
@@ -0,0 +1,55 @@
+{
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "projectname": "collect_information",
+ "setting": {
+ "compileHotReLoad": true
+ },
+ "condition": {
+ "miniprogram": {
+ "list": [
+ {
+ "name": "",
+ "pathName": "pages/mine/mine",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/login/login",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/mine/mine",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/index/index",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/index/dataEntry/buildFloorEntry/buildFloorEntry",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/register/register",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
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..0c08573
--- /dev/null
+++ b/collect_information/src/app.config.ts
@@ -0,0 +1,38 @@
+export default defineAppConfig({
+ pages: [
+ 'pages/login/login',
+ 'pages/register/register',
+ 'pages/index/index',
+ 'pages/mine/mine',
+ 'pages/employeeInfo/employeeInfo',
+ ],
+ window: {
+ backgroundTextStyle: 'light',
+ navigationBarBackgroundColor: '#f7f8fa',
+ navigationBarTitleText: '',
+ navigationBarTextStyle: 'black',
+ },
+ tabBar: {
+ list: [
+ {
+ pagePath: 'pages/index/index',
+ text: '首页',
+ iconPath: "assets/mine/punch.png",
+ selectedIconPath: "assets/mine/punch-active.png"
+ },
+ {
+ pagePath: 'pages/employeeInfo/employeeInfo',
+ text: '员工信息',
+ iconPath: "assets/mine/punch.png",
+ selectedIconPath: "assets/mine/punch-active.png"
+ },
+ {
+ pagePath: 'pages/mine/mine',
+ text: '我的',
+ iconPath: "assets/mine/my.png",
+ selectedIconPath: "assets/mine/my-active.png"
+ },
+ ]
+ }
+
+})
diff --git a/collect_information/src/app.scss b/collect_information/src/app.scss
new file mode 100644
index 0000000..b6faf5f
--- /dev/null
+++ b/collect_information/src/app.scss
@@ -0,0 +1,4 @@
+*{
+ margin: 0;
+ padding: 0;
+}
diff --git a/collect_information/src/app.ts b/collect_information/src/app.ts
new file mode 100644
index 0000000..60b67c5
--- /dev/null
+++ b/collect_information/src/app.ts
@@ -0,0 +1,15 @@
+import {createApp} from 'vue'
+import {createPinia} from 'pinia'
+import './app.scss'
+import './assets/scss/colorui.scss'
+
+const App = createApp({
+ onShow(options) {
+ console.log('App onShow.')
+ },
+ // 入口组件不需要实现 render 方法,即使实现了也会被 taro 所覆盖
+})
+
+App.use(createPinia())
+
+export default App
diff --git a/collect_information/src/assets/images/arrow.png b/collect_information/src/assets/images/arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..521b08afecb4c54f4aaa904fe178bb28a829c6d2
GIT binary patch
literal 13786
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