Compare commits
5 Commits
34f9c8d0e6
...
trunk
| Author | SHA1 | Date | |
|---|---|---|---|
| f2e7fd9d85 | |||
| 285db3f445 | |||
| 763a6245d2 | |||
| 2cb532c3d7 | |||
| 6a2c94c7cf |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
dist/
|
dist/
|
||||||
|
dist-dev/
|
||||||
deploy_versions/
|
deploy_versions/
|
||||||
.temp/
|
.temp/
|
||||||
.rn_temp/
|
.rn_temp/
|
||||||
|
|||||||
@ -12,6 +12,20 @@ const MockPlugin: PluginItem = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const CIPluginOpt = () => {
|
||||||
|
const brand = process.env.BRAND as 'prod' | 'dev'; // 取环境变量
|
||||||
|
const map = {
|
||||||
|
prod: { appid: 'wxf0724a83f8e377d2', privateKeyPath: 'keys/private.wxf0724a83f8e377d2.key' },
|
||||||
|
dev: { appid: 'wx2d56597fd541f1a6', privateKeyPath: 'keys/private.wx2d56597fd541f1a6.key' },
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
weapp: map[brand] || map.prod,
|
||||||
|
version: process.env.VERSION || '1.0.0',
|
||||||
|
desc: `build for ${brand}`,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// https://taro-docs.jd.com/docs/next/config#defineconfig-辅助函数
|
// https://taro-docs.jd.com/docs/next/config#defineconfig-辅助函数
|
||||||
export default defineConfig(async (merge, _env: ConfigEnv) => {
|
export default defineConfig(async (merge, _env: ConfigEnv) => {
|
||||||
const baseConfig: UserConfigExport = {
|
const baseConfig: UserConfigExport = {
|
||||||
@ -25,13 +39,15 @@ export default defineConfig(async (merge, _env: ConfigEnv) => {
|
|||||||
828: 1.81 / 2
|
828: 1.81 / 2
|
||||||
},
|
},
|
||||||
sourceRoot: 'src',
|
sourceRoot: 'src',
|
||||||
outputRoot: 'dist',
|
outputRoot: process.env.OUTPUT_ROOT || 'dist',
|
||||||
plugins: ['@tarojs/plugin-html'],
|
plugins: [['@tarojs/plugin-mini-ci', CIPluginOpt()], '@tarojs/plugin-html'],
|
||||||
// plugins: ['@tarojs/plugin-html', MockPlugin],
|
// plugins: ['@tarojs/plugin-html', MockPlugin],
|
||||||
defineConstants: {
|
defineConstants: {
|
||||||
|
'process.env.BRAND': JSON.stringify(process.env.BRAND),
|
||||||
},
|
},
|
||||||
copy: {
|
copy: {
|
||||||
patterns: [
|
patterns: [
|
||||||
|
{from: 'project.config.dev.json',to: 'dist-dev/project.config.json'},
|
||||||
],
|
],
|
||||||
options: {
|
options: {
|
||||||
}
|
}
|
||||||
|
|||||||
27
keys/private.wx2d56597fd541f1a6.key
Normal file
27
keys/private.wx2d56597fd541f1a6.key
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEArjidDs/HGidBTzyOssyhX/Yvlr+BZxO3Qqe1iFBIJYWVXwiJ
|
||||||
|
KFVZw14rPKnh6ORB9qpMq3+fYJ7VsodmobnVlTaFXxJ8yi+tVZSZyZPtHabu2JVO
|
||||||
|
qu7LX709p5NTFcrmOY6+NJA827+hg6V0Nl3b4CWLsouPHgiIxpqnLeaOka3lbPMq
|
||||||
|
vQuDeMCbQNFe5Jz7C0gc6dXwEpDExNX4WiVfi4UP5bcYiUKlbdben5i6qbFrZ4QK
|
||||||
|
woYoAIhr60jQGfB6Jg7YkbbAyh42XR3BMkf2TPQqieZM1/IKNuw2evtA2BqLJuiz
|
||||||
|
cQ1qNBBXczbJv9KjBVAzAJgT4InUyJF+QfFJ6wIDAQABAoIBAQCf2kohIPvqP0Jp
|
||||||
|
VYMJA0C+L8CSbLxqu2hWvFKP9Dl+VAct30MZwtZNr8W0L5uceHMdxDv8z2iI2rPw
|
||||||
|
ztOYaE5UTmYpSWk+imhcMbC5iAT0RAq6pqQ7qkboXVaIv2BoinabMSHMUNvGNRoZ
|
||||||
|
FGKAz7XDADAhbnOudt4ofBYQw47kkko8vaDZBJS6UGN+QVJpyBtJKohaXKC6HRva
|
||||||
|
2c8zDwVZlKMrPl4WB4cg0+WPv6vUZymv8U7flwY0xJBBWwZUxqbmjqbTg8BGb5Mu
|
||||||
|
tpIZRvTGNxbDu9Ms7mdYdGGe/PFmqgj1hOomeXvBlnYz+fmWHu5ElyPGBHD92N7x
|
||||||
|
Hdcopp4BAoGBANqQUfxzjGcBvSSSowehSvgVCnUFsTxSE8c9HQRX4LtMnLCo6c6m
|
||||||
|
Hxf+l67FyY5704EW29PLu5ETdLBm6pCaIk8aJo467l8M9BOHmE/CwNciloHxXa4h
|
||||||
|
/gUKex6EsFJoT+1gaCaDJeu0gDJl49QnpYOrma2CZ8vyG3+NCotuYturAoGBAMwP
|
||||||
|
8G2ObLZUFPZAfhGZrobUom2dCtJXenYupxSvJ/rNd7zY+F3pcyi461eMIkKFaxQX
|
||||||
|
bRyDi/LRCQRKrSDuw3Dt4Ne9gkpdlI/LUDTUUbWdDuCXxfsXSRAYHC1ae0rsiGQv
|
||||||
|
PaTotkDSjdAIKdgd0bmeufFZ2Ozmid2lHzSZfwrBAoGAQXSVSSClvLeVmJ1du8w/
|
||||||
|
MnrCrfctdB40lCemSAW1ZQJ1rqZ3lw7DIyF49buAOG63EeLxpMVQAAuul6HKv9GZ
|
||||||
|
Us1HHLNjbg3oDu093S07KXLPVk0dvCer9oCEDMi6MYPR5ApKRrZiJevhtLY0+/V/
|
||||||
|
qSY8GO2D/l0chR+NN+KwMo8CgYB4Y07s04G/b4uOXC4EJC6azQems2eXAJT29D8O
|
||||||
|
LOfhRybE+xxMC1YtSCtP0xTDOgMaL1fn4pPGBRzUs1nAfBxBm5VyshMT3HGxA7ml
|
||||||
|
8TzjcG0+g0wB/pLUM+UrvJ3QbgtpT5WGnOQpCg8wFCDbp3v7jnEUunUIDlp3sNrg
|
||||||
|
JU6WAQKBgDjcfRDtnmSxSiejsZaZM7gCAYlZq6WBuvQ6WF+nD9mzEgzkw3F+1cHC
|
||||||
|
Y905VPGb/vCPAV+JdN7LxnMn2G3JoWPqrhOIT6KgPgAYbVAq1hmLqXMjGi53n9uY
|
||||||
|
39GL4UgJkywIdEkla/8zNFNKZgQulWPDJqb/MFcVo3/VegEfwdbk
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
27
keys/private.wxf0724a83f8e377d2.key
Normal file
27
keys/private.wxf0724a83f8e377d2.key
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEpAIBAAKCAQEA1Tl6FYIIWB8b+OjYY9s6cOJf71Vn0J/u/kdq5CH/LMOdNrUh
|
||||||
|
fq3shAwdDkXmuRIpHU7Noxisu71tB2EumigIwBDRVyrdwPu/p6QWyaMgrh0bdtaC
|
||||||
|
LKW/j2teNU1MCSWyCDyEeZ9PJteK5+ieX+ZPDg17HLV2dISpB71AGyM461DIHCAV
|
||||||
|
uaanUJ4MYCtp9t7OFgrD4dNzDMH0lBJBczRQAmnit0GpJD/y2rfgtL+HaKpDN8rc
|
||||||
|
w80+3HVfhKq3niy/vBbI6alqFb1Mh9O5q6/c1tEWQKPn3TzneGIDhMupGzHEzrVR
|
||||||
|
j87+1cyYi8PtBdNMPls+zPn7MoajjrASFyo1hQIDAQABAoIBABHu652zehAvTaL5
|
||||||
|
snlzjs6/u2HdxQV+7hLk3tChK10QdsCLK24EIshYXHk+19Do/hxA7HqzMJP5spnU
|
||||||
|
Sp8cjt/YikLSkCQTCGOJIYGD/tOmDxFHqVsn9ZySYzIIdkSurvKSZHH2PCoAJuaq
|
||||||
|
Yeee7zc3WwtnF7dlEPJdsG6X38mqslzaLOuiftkHJ8hQ+1rWM9FFEp/S3pLfLB+7
|
||||||
|
jEQhuVk0WjLTqmWmKvi0Nz5tUibBpF1OHtCfIhPjb1N8k/bcv1jumETx+2PDxA62
|
||||||
|
zpPNGespBaET+jeEqNCqLO7Zq8+iUO8d4XpZsFCR2cyE6zzXK2mhQ+2pW2BRU/DI
|
||||||
|
w/ZylmECgYEA6uPRJ4uk+NavoJlQCv7R9B8CGbwzbRaG8sg/NuwvTOO6D4FGUdcu
|
||||||
|
f8qA2kCd8bSCuWrS1mVgPpvzwHt5Bh3k7FC/0SfW5ZDC5Lp1IssI0jeka39vfPOD
|
||||||
|
ZdcvgJ3dUnHUrvb4L4PclgCa3KPXLTVDnK+4ExvaYOxNAaG6wROCGBsCgYEA6GMy
|
||||||
|
nCsPr21kKmhybCrhcTYoENb45hz6CCnXr4MGnYzF9c2ss2KXjR/boCdhF+3wxmmm
|
||||||
|
F4TKgcicOUfOJIXSIHBD9nphLa5CfrksLxfX0iIyNCG74aXIWl6M6QgQZdWqV4qC
|
||||||
|
xYTtFYACELIb8qK/mraMP28c9BzDpwd909ZlAt8CgYEAmpXCIa+CrA3GWgBsMEBR
|
||||||
|
9sKthDha8/E+cOuexsubuZOp8OhYWiYuwQWJ1ZlvGRJ+cf6+sUDYnXvPaJ8aIA9u
|
||||||
|
iKQACWuZv02NJjEcRACxVoAuIl0lB2vPzydWaOP8M3UczuVUoxi6BLJzOMBPLb5/
|
||||||
|
N9BhaZoMF3uMloVUvhrTpH8CgYA9sQfgeXYChjHPKEcn/AI5Qb1FKyyMOikOPb1q
|
||||||
|
dIgvDw4GgQFV5diBuHFfhNS7u4jtw2I6YCA6b/05H5zUCUqNHgCM0FQ4AkjYx2O5
|
||||||
|
ZMUAnd9iA4qTDqWvh+Y0ftWLkztTXgv1T6J40LC7qezNbvMaqVd2B5NSIsi18MEw
|
||||||
|
mXvbVQKBgQC0Rh5TJEfeBWRoIixwFuDUgHYRsdk3SV1hymYO3aKBr0uD8Arv4v1M
|
||||||
|
XO6DchFjcpKuwScjXX5yEot5PJOUTPG2T2uBPnJggtNig2dnRzQDLM+bK0vVecoz
|
||||||
|
QL9YMOYv6DNH6Z2yEfMZHZLto9Oaqm9J62hZahZ2GukFLOMBGZAVhA==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
31
package.json
31
package.json
@ -10,29 +10,10 @@
|
|||||||
"framework": "React"
|
"framework": "React"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:weapp": "taro build --type weapp",
|
"build:weapp": "BRAND=prod taro build --type weapp",
|
||||||
"build:swan": "taro build --type swan",
|
"build:dev:weapp": "BRAND=dev OUTPUT_ROOT=dist-dev taro build --type weapp --upload",
|
||||||
"build:alipay": "taro build --type alipay",
|
"dev:weapp": "BRAND=prod npm run build:weapp -- --watch",
|
||||||
"build:tt": "taro build --type tt",
|
"dev:dev:weapp": "BRAND=dev OUTPUT_ROOT=dist-dev taro build --type weapp --watch"
|
||||||
"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",
|
|
||||||
"lint:format": "npx prettier --write",
|
|
||||||
"lint:format-all": "npx prettier --write 'src/**/*.{ts,js,css,jsx,html,vue,tsx}'"
|
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"last 3 versions",
|
"last 3 versions",
|
||||||
@ -76,6 +57,7 @@
|
|||||||
"@babel/core": "^7.8.0",
|
"@babel/core": "^7.8.0",
|
||||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
||||||
"@tarojs/cli": "4.0.9",
|
"@tarojs/cli": "4.0.9",
|
||||||
|
"@tarojs/plugin-mini-ci": "^4.1.5",
|
||||||
"@tarojs/plugin-mock": "^0.0.9",
|
"@tarojs/plugin-mock": "^0.0.9",
|
||||||
"@tarojs/taro-loader": "4.0.9",
|
"@tarojs/taro-loader": "4.0.9",
|
||||||
"@tarojs/test-utils-react": "^0.1.1",
|
"@tarojs/test-utils-react": "^0.1.1",
|
||||||
@ -95,6 +77,7 @@
|
|||||||
"eslint-plugin-react-hooks": "^4.2.0",
|
"eslint-plugin-react-hooks": "^4.2.0",
|
||||||
"jest": "^29.3.1",
|
"jest": "^29.3.1",
|
||||||
"jest-environment-jsdom": "^29.5.0",
|
"jest-environment-jsdom": "^29.5.0",
|
||||||
|
"miniprogram-ci": "^2.1.14",
|
||||||
"postcss": "^8.4.18",
|
"postcss": "^8.4.18",
|
||||||
"prettier": "^3.3.1",
|
"prettier": "^3.3.1",
|
||||||
"react-refresh": "^0.11.0",
|
"react-refresh": "^0.11.0",
|
||||||
@ -110,5 +93,5 @@
|
|||||||
"@tarojs/binding"
|
"@tarojs/binding"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
"packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184"
|
||||||
}
|
}
|
||||||
|
|||||||
5985
pnpm-lock.yaml
generated
5985
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
47
project.config.dev.json
Normal file
47
project.config.dev.json
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"miniprogramRoot": "./",
|
||||||
|
"description": "boluo app",
|
||||||
|
"setting": {
|
||||||
|
"urlCheck": true,
|
||||||
|
"es6": false,
|
||||||
|
"enhance": false,
|
||||||
|
"compileHotReLoad": false,
|
||||||
|
"postcss": false,
|
||||||
|
"minified": true,
|
||||||
|
"babelSetting": {
|
||||||
|
"ignore": [],
|
||||||
|
"disablePlugins": [],
|
||||||
|
"outputPath": ""
|
||||||
|
},
|
||||||
|
"coverView": false,
|
||||||
|
"showShadowRootInWxmlPanel": false,
|
||||||
|
"packNpmRelationList": [],
|
||||||
|
"ignoreUploadUnusedFiles": true,
|
||||||
|
"compileWorklet": false,
|
||||||
|
"uglifyFileName": false,
|
||||||
|
"uploadWithSourceMap": true,
|
||||||
|
"packNpmManually": false,
|
||||||
|
"minifyWXSS": true,
|
||||||
|
"minifyWXML": true,
|
||||||
|
"localPlugins": false,
|
||||||
|
"disableUseStrict": false,
|
||||||
|
"useCompilerPlugins": false,
|
||||||
|
"condition": false,
|
||||||
|
"swc": false,
|
||||||
|
"disableSWC": true
|
||||||
|
},
|
||||||
|
"compileType": "miniprogram",
|
||||||
|
"srcMiniprogramRoot": "dist/",
|
||||||
|
"condition": {},
|
||||||
|
"editorSetting": {
|
||||||
|
"tabIndent": "insertSpaces",
|
||||||
|
"tabSize": 2
|
||||||
|
},
|
||||||
|
"libVersion": "3.4.6",
|
||||||
|
"packOptions": {
|
||||||
|
"ignore": [],
|
||||||
|
"include": []
|
||||||
|
},
|
||||||
|
"appid": "wx2d56597fd541f1a6",
|
||||||
|
"simulatorPluginLibVersion": {}
|
||||||
|
}
|
||||||
@ -11,6 +11,16 @@
|
|||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
background: #FFFFFF;
|
background: #FFFFFF;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__mask {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(255, 255, 255, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
&__header {
|
&__header {
|
||||||
|
|||||||
@ -5,13 +5,13 @@ import React, { useCallback } from 'react';
|
|||||||
|
|
||||||
import { CertificationStatusIcon } from '@/components/certification-status';
|
import { CertificationStatusIcon } from '@/components/certification-status';
|
||||||
import { PageUrl } from '@/constants/app';
|
import { PageUrl } from '@/constants/app';
|
||||||
import { CITY_CODE_TO_NAME_MAP, COUNTY_CODE_TO_NAME_MAP } from '@/constants/city';
|
// import { CITY_CODE_TO_NAME_MAP, COUNTY_CODE_TO_NAME_MAP } from '@/constants/city';
|
||||||
import { CertificationStatusType } from '@/constants/company';
|
import { CertificationStatusType } from '@/constants/company';
|
||||||
import { EMPLOY_TYPE_TITLE_MAP, EmployType } from '@/constants/job';
|
import { EMPLOY_TYPE_TITLE_MAP, EmployType } from '@/constants/job';
|
||||||
import { JobInfo } from '@/types/job';
|
import { JobInfo } from '@/types/job';
|
||||||
import { LocationInfo } from '@/types/location';
|
// import { LocationInfo } from '@/types/location';
|
||||||
import { getJobSalary, getJobTitle } from '@/utils/job';
|
import { getJobSalary, getJobTitle } from '@/utils/job';
|
||||||
import { calcDistance } from '@/utils/location';
|
// import { calcDistance } from '@/utils/location';
|
||||||
import { navigateTo, redirectTo } from '@/utils/route';
|
import { navigateTo, redirectTo } from '@/utils/route';
|
||||||
|
|
||||||
import './index.less';
|
import './index.less';
|
||||||
@ -23,16 +23,16 @@ interface IProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const PREFIX = 'job-card';
|
const PREFIX = 'job-card';
|
||||||
const getCityDes = (location: LocationInfo) => {
|
// const getCityDes = (location: LocationInfo) => {
|
||||||
if (!location) {
|
// if (!location) {
|
||||||
return '';
|
// return '';
|
||||||
}
|
// }
|
||||||
let des = CITY_CODE_TO_NAME_MAP.get(location.cityCode);
|
// let des = CITY_CODE_TO_NAME_MAP.get(location.cityCode);
|
||||||
if (location.countyCode) {
|
// if (location.countyCode) {
|
||||||
des += `-${COUNTY_CODE_TO_NAME_MAP.get(location.countyCode)}`;
|
// des += `-${COUNTY_CODE_TO_NAME_MAP.get(location.countyCode)}`;
|
||||||
}
|
// }
|
||||||
return des;
|
// return des;
|
||||||
};
|
// };
|
||||||
|
|
||||||
function JobCard(props: IProps) {
|
function JobCard(props: IProps) {
|
||||||
const { className, data, redirectOpen } = props;
|
const { className, data, redirectOpen } = props;
|
||||||
@ -45,7 +45,7 @@ function JobCard(props: IProps) {
|
|||||||
publisher,
|
publisher,
|
||||||
publisherAvatar,
|
publisherAvatar,
|
||||||
jobLocation,
|
jobLocation,
|
||||||
distance,
|
// distance,
|
||||||
isAuthed = false,
|
isAuthed = false,
|
||||||
} = data;
|
} = data;
|
||||||
|
|
||||||
@ -104,6 +104,7 @@ function JobCard(props: IProps) {
|
|||||||
</div>
|
</div>
|
||||||
{/*<div className={`${PREFIX}__city`}>{getCityDes(jobLocation)}</div>*/}
|
{/*<div className={`${PREFIX}__city`}>{getCityDes(jobLocation)}</div>*/}
|
||||||
</div>
|
</div>
|
||||||
|
{data.isRead && <div className={`${PREFIX}__mask`} />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import Taro from '@tarojs/taro';
|
||||||
|
|
||||||
import { List, PullRefresh } from '@taroify/core';
|
import { List, PullRefresh } from '@taroify/core';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { isEqual } from 'lodash-es';
|
import { isEqual } from 'lodash-es';
|
||||||
@ -5,6 +7,7 @@ import { useCallback, useEffect, useRef, useState } from 'react';
|
|||||||
|
|
||||||
import JobCard from '@/components/job-card';
|
import JobCard from '@/components/job-card';
|
||||||
import ListPlaceholder from '@/components/list-placeholder';
|
import ListPlaceholder from '@/components/list-placeholder';
|
||||||
|
import { EventName } from '@/constants/app';
|
||||||
import { JobType, EmployType, SortType } from '@/constants/job';
|
import { JobType, EmployType, SortType } from '@/constants/job';
|
||||||
import { JobInfo, GetJobsRequest } from '@/types/job';
|
import { JobInfo, GetJobsRequest } from '@/types/job';
|
||||||
import { logWithPrefix } from '@/utils/common';
|
import { logWithPrefix } from '@/utils/common';
|
||||||
@ -58,6 +61,23 @@ function JobList(props: IJobListProps) {
|
|||||||
const prevRequestProps = useRef<IRequestProps>({});
|
const prevRequestProps = useRef<IRequestProps>({});
|
||||||
const onListEmptyRef = useRef(onListEmpty);
|
const onListEmptyRef = useRef(onListEmpty);
|
||||||
|
|
||||||
|
const handleReadJob = useCallback(
|
||||||
|
(jobId: string) => {
|
||||||
|
const index = dataList.findIndex(d => String(d.id) === jobId);
|
||||||
|
if (index < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const job = dataList[index];
|
||||||
|
if (!job || job.isRead) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log('auto mark read', jobId);
|
||||||
|
dataList.splice(index, 1, { ...job, isRead: true });
|
||||||
|
setDataList([...dataList]);
|
||||||
|
},
|
||||||
|
[dataList]
|
||||||
|
);
|
||||||
|
|
||||||
const handleRefresh = useCallback(async () => {
|
const handleRefresh = useCallback(async () => {
|
||||||
log('start pull refresh');
|
log('start pull refresh');
|
||||||
try {
|
try {
|
||||||
@ -109,6 +129,13 @@ function JobList(props: IJobListProps) {
|
|||||||
onListEmptyRef.current = onListEmpty;
|
onListEmptyRef.current = onListEmpty;
|
||||||
}, [onListEmpty]);
|
}, [onListEmpty]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
Taro.eventCenter.on(EventName.VIEW_JOB_SUCCESS, handleReadJob);
|
||||||
|
return () => {
|
||||||
|
Taro.eventCenter.off(EventName.VIEW_JOB_SUCCESS, handleReadJob);
|
||||||
|
};
|
||||||
|
}, [handleReadJob]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
log('request params changed');
|
log('request params changed');
|
||||||
requestProps.current = {
|
requestProps.current = {
|
||||||
|
|||||||
@ -39,9 +39,7 @@ function JoinEntry({ onBindSuccess }: JoinEntryProps) {
|
|||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{visible && (
|
{visible && <LoginDialog onCancel={() => setVisible(false)} onSuccess={onBindSuccess} needPhone={needPhone} />}
|
||||||
<LoginDialog disableCheck onCancel={() => setVisible(false)} onSuccess={onBindSuccess} needPhone={needPhone} />
|
|
||||||
)}
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,51 @@
|
|||||||
background: #6d3df5;
|
background: #6d3df5;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
||||||
&__simple {
|
&-simple {
|
||||||
|
padding: 39px 35px;
|
||||||
|
height: 120px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
&__bg {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 16px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
.flex-row();
|
||||||
|
line-height: 42px;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__title {
|
||||||
|
font-size: 26px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
&__money {
|
||||||
|
font-weight: 800;
|
||||||
|
margin-left: 12px;
|
||||||
|
font-size: 44px;
|
||||||
|
}
|
||||||
|
&__button {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 2;
|
||||||
|
top: 44px;
|
||||||
|
right: 24px;
|
||||||
|
font-size: 28px;
|
||||||
|
line-height: 32px;
|
||||||
|
&-image {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__bg {
|
&__bg {
|
||||||
@ -28,20 +72,7 @@
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__button {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 2;
|
|
||||||
top: 44px;
|
|
||||||
right: 56px;
|
|
||||||
font-size: 24px;
|
|
||||||
line-height: 24px;
|
|
||||||
&-image {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&__title {
|
&__title {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
|||||||
@ -144,24 +144,37 @@ export default function PartnerKanban({ simple }: PartnerKanbanProps) {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getProfitStats();
|
getProfitStats();
|
||||||
}, []);
|
}, []);
|
||||||
|
if (simple) {
|
||||||
return (
|
return (
|
||||||
<div className={`${PREFIX} ${simple ? `${PREFIX}__simple` : ''}`}>
|
<div className={`${PREFIX} ${PREFIX}-simple`}>
|
||||||
|
<Image
|
||||||
|
className={`${PREFIX}-simple__bg`}
|
||||||
|
src="https://publiccdn.neighbourhood.com.cn/img/partner_bg.png"
|
||||||
|
mode="aspectFill"
|
||||||
|
/>
|
||||||
|
<div className={`${PREFIX}-simple__content`}>
|
||||||
|
<div className={`${PREFIX}-simple__title`}>总收益(元)</div>
|
||||||
|
<div className={`${PREFIX}-simple__money`}>{formatMoney(total)}</div>
|
||||||
|
</div>
|
||||||
|
<div className={`${PREFIX}-simple__button`} onClick={handleNavigate}>
|
||||||
|
详情
|
||||||
|
<Image
|
||||||
|
className={`${PREFIX}-simple__button-image`}
|
||||||
|
mode="aspectFit"
|
||||||
|
src={require('@/statics/svg/caret-right.svg')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<div className={PREFIX}>
|
||||||
<Image
|
<Image
|
||||||
className={`${PREFIX}__bg`}
|
className={`${PREFIX}__bg`}
|
||||||
src="https://publiccdn.neighbourhood.com.cn/img/partner_bg.png"
|
src="https://publiccdn.neighbourhood.com.cn/img/partner_bg.png"
|
||||||
mode="aspectFill"
|
mode="aspectFill"
|
||||||
/>
|
/>
|
||||||
<div className={`${PREFIX}__content`}>
|
<div className={`${PREFIX}__content`}>
|
||||||
{simple && (
|
|
||||||
<div className={`${PREFIX}__button`} onClick={handleNavigate}>
|
|
||||||
查看详情
|
|
||||||
<Image
|
|
||||||
className={`${PREFIX}__button-image`}
|
|
||||||
mode="aspectFit"
|
|
||||||
src={require('@/statics/svg/caret-right.svg')}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
<div className={`${PREFIX}__total`}>
|
<div className={`${PREFIX}__total`}>
|
||||||
<div className={`${PREFIX}__title`}>总收益(元)</div>
|
<div className={`${PREFIX}__title`}>总收益(元)</div>
|
||||||
<div className={`${PREFIX}__money`}>{formatMoney(total)}</div>
|
<div className={`${PREFIX}__money`}>{formatMoney(total)}</div>
|
||||||
@ -183,7 +196,6 @@ export default function PartnerKanban({ simple }: PartnerKanbanProps) {
|
|||||||
<div className={`${PREFIX}__money`}>{formatMoney(stats.availableProfit)}</div>
|
<div className={`${PREFIX}__money`}>{formatMoney(stats.availableProfit)}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{!simple && (
|
|
||||||
<div className={`${PREFIX}__buttons`}>
|
<div className={`${PREFIX}__buttons`}>
|
||||||
<Button className={`${PREFIX}__withdraw`} onClick={handleViewWithdraw}>
|
<Button className={`${PREFIX}__withdraw`} onClick={handleViewWithdraw}>
|
||||||
提现
|
提现
|
||||||
@ -192,16 +204,13 @@ export default function PartnerKanban({ simple }: PartnerKanbanProps) {
|
|||||||
提现记录
|
提现记录
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
{!simple && <TipDialog open={tipOpen} onClose={handleTipClose} />}
|
<TipDialog open={tipOpen} onClose={handleTipClose} />
|
||||||
{!simple && (
|
|
||||||
<WithdrawDialog
|
<WithdrawDialog
|
||||||
count={Math.min(Number(formatMoney(stats.availableBalance)), 200)}
|
count={Math.min(Number(formatMoney(stats.availableBalance)), 200)}
|
||||||
open={withdrawOpen}
|
open={withdrawOpen}
|
||||||
onClose={handleWithdrawClose}
|
onClose={handleWithdrawClose}
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -226,6 +226,20 @@
|
|||||||
margin-top: 32px;
|
margin-top: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__hint {
|
||||||
|
font-size: 24px;
|
||||||
|
line-height: 40px;
|
||||||
|
text-align: center;
|
||||||
|
color: @blColorG1;
|
||||||
|
margin-top: 24px;
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
color: @blHighlightColor;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================= 群 ================================================= //
|
// ============================================= 群 ================================================= //
|
||||||
|
|||||||
@ -152,6 +152,9 @@ export default function JobBuy(props: IProps) {
|
|||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
<div className={`${PREFIX}__job-buy__hint`}>
|
||||||
|
注:日会员有效期为 <div className="highlight">支付后24小时</div>
|
||||||
|
</div>
|
||||||
<Button className={`${PREFIX}__job-buy__button`} onClick={handleBuy}>
|
<Button className={`${PREFIX}__job-buy__button`} onClick={handleBuy}>
|
||||||
{`支付 ${selectItem.amt} 元`}
|
{`支付 ${selectItem.amt} 元`}
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@ -36,7 +36,7 @@ interface CityOption extends ISelectOption<CityValue> {
|
|||||||
const PREFIX = 'user-batch-publish';
|
const PREFIX = 'user-batch-publish';
|
||||||
const log = logWithPrefix(PREFIX);
|
const log = logWithPrefix(PREFIX);
|
||||||
const SERVICE_ILLUSTRATE = `服务方式:帮您把招聘需求发到众多同城合作主播群
|
const SERVICE_ILLUSTRATE = `服务方式:帮您把招聘需求发到众多同城合作主播群
|
||||||
群发次数:每日1次,连发3天
|
群发次数:杭州、广州发3次,其他城市1次
|
||||||
内容要求:仅限带货主播招聘需求,其他不发
|
内容要求:仅限带货主播招聘需求,其他不发
|
||||||
主播联系:内容中留招聘方联系方式,主播直接联系`;
|
主播联系:内容中留招聘方联系方式,主播直接联系`;
|
||||||
const cityValues: CityValue[] = [
|
const cityValues: CityValue[] = [
|
||||||
|
|||||||
@ -24,6 +24,7 @@ export enum EventName {
|
|||||||
SELECT_MY_PUBLISH_JOB = 'select_my_publish_job',
|
SELECT_MY_PUBLISH_JOB = 'select_my_publish_job',
|
||||||
EXIT_CHAT_PAGE = 'exit_chat_page',
|
EXIT_CHAT_PAGE = 'exit_chat_page',
|
||||||
VIEW_MATERIAL_SUCCESS = 'view_material_success',
|
VIEW_MATERIAL_SUCCESS = 'view_material_success',
|
||||||
|
VIEW_JOB_SUCCESS = 'view_job_success',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum OpenSource {
|
export enum OpenSource {
|
||||||
@ -75,6 +76,7 @@ export enum PageUrl {
|
|||||||
Partner = 'pages/partner/index',
|
Partner = 'pages/partner/index',
|
||||||
WithdrawRecord = 'pages/withdraw-record/index',
|
WithdrawRecord = 'pages/withdraw-record/index',
|
||||||
GroupDelegatePublish = 'pages/group-delegate-publish/index',
|
GroupDelegatePublish = 'pages/group-delegate-publish/index',
|
||||||
|
GiveVip = 'pages/give-vip/index',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum PluginUrl {
|
export enum PluginUrl {
|
||||||
|
|||||||
@ -18,7 +18,8 @@ import {
|
|||||||
ALL_SORT_TYPES,
|
ALL_SORT_TYPES,
|
||||||
EMPLOY_TYPE_TITLE_MAP,
|
EMPLOY_TYPE_TITLE_MAP,
|
||||||
EmployType,
|
EmployType,
|
||||||
JOB_TABS, JobSourceType,
|
JOB_TABS,
|
||||||
|
JobSourceType,
|
||||||
JobType,
|
JobType,
|
||||||
SORT_TYPE_TITLE_MAP,
|
SORT_TYPE_TITLE_MAP,
|
||||||
SortType,
|
SortType,
|
||||||
@ -143,12 +144,7 @@ function JobFragment(props: IProps) {
|
|||||||
return (
|
return (
|
||||||
<div className={`${PREFIX}__container`}>
|
<div className={`${PREFIX}__container`}>
|
||||||
<div className={`${PREFIX}__top-search-bar`}>
|
<div className={`${PREFIX}__top-search-bar`}>
|
||||||
<SearchInput
|
<SearchInput disabled className={`${PREFIX}__search`} placeholder="试试 女装" onClick={handleClickSearch} />
|
||||||
disabled
|
|
||||||
className={`${PREFIX}__search`}
|
|
||||||
placeholder="试试 女装"
|
|
||||||
onClick={handleClickSearch}
|
|
||||||
/>
|
|
||||||
<div className={classNames(`${PREFIX}__employType-select`)} onClick={handleClickEmployTypeSelect}>
|
<div className={classNames(`${PREFIX}__employType-select`)} onClick={handleClickEmployTypeSelect}>
|
||||||
<div className="title">
|
<div className="title">
|
||||||
{employType && employType !== EmployType.All ? EMPLOY_TYPE_TITLE_MAP[employType] : '类型'}
|
{employType && employType !== EmployType.All ? EMPLOY_TYPE_TITLE_MAP[employType] : '类型'}
|
||||||
|
|||||||
@ -98,6 +98,7 @@ export const APP_CONFIG: AppConfigType = {
|
|||||||
PageUrl.Partner,
|
PageUrl.Partner,
|
||||||
PageUrl.WithdrawRecord,
|
PageUrl.WithdrawRecord,
|
||||||
PageUrl.GroupDelegatePublish,
|
PageUrl.GroupDelegatePublish,
|
||||||
|
PageUrl.GiveVip,
|
||||||
// PageUrl.DevDebug,
|
// PageUrl.DevDebug,
|
||||||
],
|
],
|
||||||
window: {
|
window: {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
// export const DOMAIN = 'http://192.168.60.191:8082';
|
// export const DOMAIN = 'http://192.168.60.191:8082';
|
||||||
export const DOMAIN = 'https://neighbourhood.cn';
|
export const DOMAIN = process.env.BRAND === 'dev' ? 'https://dev.neighbourhood.cn' : 'https://neighbourhood.cn';
|
||||||
|
// export const DOMAIN = 'https://dev.neighbourhood.cn';
|
||||||
export const BASE_URL = `${DOMAIN}/api`;
|
export const BASE_URL = `${DOMAIN}/api`;
|
||||||
|
|
||||||
export enum API {
|
export enum API {
|
||||||
|
|||||||
3
src/pages/give-vip/index.config.ts
Normal file
3
src/pages/give-vip/index.config.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default definePageConfig({
|
||||||
|
navigationBarTitleText: '赠送会员',
|
||||||
|
});
|
||||||
1
src/pages/give-vip/index.less
Normal file
1
src/pages/give-vip/index.less
Normal file
@ -0,0 +1 @@
|
|||||||
|
.give-vip {}
|
||||||
12
src/pages/give-vip/index.tsx
Normal file
12
src/pages/give-vip/index.tsx
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { Button } from '@taroify/core';
|
||||||
|
|
||||||
|
import { logWithPrefix } from '@/utils/common';
|
||||||
|
|
||||||
|
import './index.less';
|
||||||
|
|
||||||
|
const PREFIX = 'give-vip';
|
||||||
|
const log = logWithPrefix(PREFIX);
|
||||||
|
|
||||||
|
export default function GiveVip() {
|
||||||
|
return <div className={PREFIX}></div>;
|
||||||
|
}
|
||||||
@ -286,6 +286,7 @@ export default function JobDetail() {
|
|||||||
if (!jobId) {
|
if (!jobId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Taro.eventCenter.trigger(EventName.VIEW_JOB_SUCCESS, jobId);
|
||||||
try {
|
try {
|
||||||
const res = await requestJobDetail(jobId);
|
const res = await requestJobDetail(jobId);
|
||||||
setData(res);
|
setData(res);
|
||||||
|
|||||||
@ -56,7 +56,27 @@
|
|||||||
&__icon {
|
&__icon {
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__block {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
|
.flex-row();
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__status {
|
||||||
|
font-size: 28px;
|
||||||
|
line-height: 32px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: @blColorG1;
|
||||||
|
|
||||||
|
&.open {
|
||||||
|
color: @blHighlightColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.error {
|
||||||
|
color: #FF5051;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6,6 +6,7 @@ import classNames from 'classnames';
|
|||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
|
|
||||||
import { EventName, OpenSource } from '@/constants/app';
|
import { EventName, OpenSource } from '@/constants/app';
|
||||||
|
import { JOB_MANAGE_STATUS_TITLE_MAP, JobManageStatus } from '@/constants/job';
|
||||||
import { JobManageInfo } from '@/types/job';
|
import { JobManageInfo } from '@/types/job';
|
||||||
import { getJobLocation, requestJobManageList } from '@/utils/job';
|
import { getJobLocation, requestJobManageList } from '@/utils/job';
|
||||||
import { getPageQuery, navigateBack } from '@/utils/route';
|
import { getPageQuery, navigateBack } from '@/utils/route';
|
||||||
@ -15,7 +16,14 @@ import Toast from '@/utils/toast';
|
|||||||
import './index.less';
|
import './index.less';
|
||||||
|
|
||||||
const PREFIX = 'page-job-select-my-publish';
|
const PREFIX = 'page-job-select-my-publish';
|
||||||
|
const STATUS_CLASS_MAP = {
|
||||||
|
[JobManageStatus.WaitVerify]: 'pending',
|
||||||
|
[JobManageStatus.Open]: 'open',
|
||||||
|
[JobManageStatus.Pending]: 'pending',
|
||||||
|
[JobManageStatus.Error]: 'error',
|
||||||
|
[JobManageStatus.Close]: 'close',
|
||||||
|
[JobManageStatus.Expire]: 'close',
|
||||||
|
};
|
||||||
export default function JobSelectMyPublish() {
|
export default function JobSelectMyPublish() {
|
||||||
const [list, setList] = useState<JobManageInfo[]>([]);
|
const [list, setList] = useState<JobManageInfo[]>([]);
|
||||||
const [jobId, setJobId] = useState<string | null>('1');
|
const [jobId, setJobId] = useState<string | null>('1');
|
||||||
@ -57,6 +65,10 @@ export default function JobSelectMyPublish() {
|
|||||||
</div>
|
</div>
|
||||||
<div className={`${PREFIX}__right`}>
|
<div className={`${PREFIX}__right`}>
|
||||||
<div className={`${PREFIX}__right__time`}>{formatTime(item.updated)}</div>
|
<div className={`${PREFIX}__right__time`}>{formatTime(item.updated)}</div>
|
||||||
|
<div className={`${PREFIX}__right__block`}>
|
||||||
|
<div className={classNames(`${PREFIX}__right__status`, { [STATUS_CLASS_MAP[item.status]]: true })}>
|
||||||
|
{JOB_MANAGE_STATUS_TITLE_MAP[item.status]}
|
||||||
|
</div>
|
||||||
{item.id === jobId && (
|
{item.id === jobId && (
|
||||||
<Image
|
<Image
|
||||||
mode="aspectFit"
|
mode="aspectFit"
|
||||||
@ -66,6 +78,7 @@ export default function JobSelectMyPublish() {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
))}
|
))}
|
||||||
</List>
|
</List>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -82,7 +82,7 @@ export default function BizService() {
|
|||||||
<div className={`${PREFIX}__delegate-h5`}>服务说明</div>
|
<div className={`${PREFIX}__delegate-h5`}>服务说明</div>
|
||||||
<div className={`${PREFIX}__delegate-card`}>
|
<div className={`${PREFIX}__delegate-card`}>
|
||||||
<div className={`${PREFIX}__delegate-body`}>服务方式:帮您把招聘需求发到众多同城合作主播群</div>
|
<div className={`${PREFIX}__delegate-body`}>服务方式:帮您把招聘需求发到众多同城合作主播群</div>
|
||||||
<div className={`${PREFIX}__delegate-body`}>群发次数:每日1次,连发3天</div>
|
<div className={`${PREFIX}__delegate-body`}>群发次数:杭州、广州发3次,其他城市1次</div>
|
||||||
<div className={`${PREFIX}__delegate-body`}>内容要求:仅限带货主播招聘需求,其他不发</div>
|
<div className={`${PREFIX}__delegate-body`}>内容要求:仅限带货主播招聘需求,其他不发</div>
|
||||||
<div className={`${PREFIX}__delegate-body`}>主播联系:内容中留招聘方联系方式,主播直接联系</div>
|
<div className={`${PREFIX}__delegate-body`}>主播联系:内容中留招聘方联系方式,主播直接联系</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -17,6 +17,7 @@ export interface JobInfo {
|
|||||||
distance?: number; // 距离。一期没有
|
distance?: number; // 距离。一期没有
|
||||||
isAuthed?: boolean; // 是否认证
|
isAuthed?: boolean; // 是否认证
|
||||||
companyName?: string;
|
companyName?: string;
|
||||||
|
isRead?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateJobInfo extends Pick<JobInfo, 'title' | 'employType' | 'jobDescription'> {
|
export interface CreateJobInfo extends Pick<JobInfo, 'title' | 'employType' | 'jobDescription'> {
|
||||||
|
|||||||
Reference in New Issue
Block a user