From c4f62b6efb52bede9bd7178fa48af8c20a720554 Mon Sep 17 00:00:00 2001 From: Apcallover <1503963513@qq.com> Date: Fri, 12 Apr 2024 17:57:52 +0800 Subject: [PATCH] =?UTF-8?q?flat:=20=E6=B7=BB=E5=8A=A0=E4=BC=81=E4=B8=9A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 150 +- api/upload.js | 52 + api/userrecruit.js | 197 +- common/dic.js | 733 ++++--- pages/index/index.vue | 1940 +++++++++-------- pages/recruit/recruit.vue | 235 +- .../enterpriceCertification.vue | 166 +- .../enterpriceCertification/pickerList.vue | 72 + .../uploadIdNumber.vue | 53 + static/font/font_2225171_8kdcwk4po24.ttf | Bin 0 -> 55940 bytes static/img/backidcard1.png | Bin 0 -> 7722 bytes static/img/idcard.png | Bin 0 -> 11993 bytes store/models/user.js | 485 +++-- vue.config.js | 44 +- 14 files changed, 2279 insertions(+), 1848 deletions(-) create mode 100644 api/upload.js create mode 100644 pages/recruit/subPage/enterpriceCertification/pickerList.vue create mode 100644 pages/recruit/subPage/enterpriceCertification/uploadIdNumber.vue create mode 100644 static/font/font_2225171_8kdcwk4po24.ttf create mode 100644 static/img/backidcard1.png create mode 100644 static/img/idcard.png diff --git a/App.vue b/App.vue index 419f2e1..6416eea 100644 --- a/App.vue +++ b/App.vue @@ -1,72 +1,78 @@ - - - - + + + + \ No newline at end of file diff --git a/api/upload.js b/api/upload.js new file mode 100644 index 0000000..132bfa5 --- /dev/null +++ b/api/upload.js @@ -0,0 +1,52 @@ +import { + request +} from '@/untils/AxiosUtils.js'; +import { + baseUrl +} from '@/config/env.js' +import { + getStore +} from '@/untils/store.js' +import { + Base64 +} from 'js-base64' +import website from "@/config/website.js" + +export async function uploadFile(file) { + uni.showLoading({ + title: '上传中' + }) + var token = getStore({ + name: 'token' + }) + return new Promise((resolve, reject) => { + const header = { + 'Authorization': `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`, + } + header[website.tokenName] = "bearer " + token + uni.uploadFile({ + url: `${baseUrl}/api/jobslink-api/resource/file/save?bussinessType=5`, + header, + filePath: file.url, + // formData: formdata, + name: 'file', + success: ({ + statusCode, + data + }) => { + const resp = JSON.parse(data) + if (statusCode === 200 && resp.code === 200) { + resolve(resp.msg) + } else { + reject(new Error('数据异常')) + } + }, + fail: (uploadFileRes) => { + reject(uploadFileRes) + }, + complete: () => { + uni.hideLoading() + } + }); + }) +} \ No newline at end of file diff --git a/api/userrecruit.js b/api/userrecruit.js index 49a0dab..e5c4ff1 100644 --- a/api/userrecruit.js +++ b/api/userrecruit.js @@ -1,93 +1,106 @@ -import { - request -} from '@/untils/AxiosUtils.js'; -import { - getStore -} from '@/untils/store.js' -function getHeader() { - const platformId = getStore({ - name: 'platformId' - }) - if (platformId) { - return { - 'Platform-Id': platformId - } - } else { - return {} - } -} -/*首页 最新任务(10条)*/ -export const getPushListByUserId = (params) => { - return request({ - url: '/api/jobslink-api/user/userrecruit/getPushListByUserId', - headers: getHeader(), - method: 'get', - params - - }) -} - -/*岗位详情*/ -// workDetail -export const userrecruitDetail = (workId) => { - return request({ - url: '/api/jobslink-api/user/userrecruit/getWorksInfoByWorkId', - method: 'get', - params: { - workId - } - }) -} - -export const submitInfo = (data) => { - return request({ - url: '/api/jobslink-api/user/userrecruit/saveApp', - method: 'post', - data: data - }) -} - -export const getuserrecruitListApp = (params) => { - return request({ - url: '/api/jobslink-api/user/userrecruit/listApp', - method: 'get', - params - }) -} -export const getuserrecruitDetailApp = (params) => { - return request({ - url: '/api/jobslink-api/user/userrecruit/detailApp', - method: 'get', - params - }) -} - -export const seeIsHaveCodep = (params) => { - return request({ - url: '/api/jobslink-api/tenant/company/app/isHaveCode', - method: 'get', - params - }) -} -export const getWorktypesBaseList = (params) => { - return request({ - url: '/api/jobslink-api/tenant/worktypes/base/list', - method: 'get', - params - }) -} - -export const getUserCompanyInfo = (params) => { - return request({ - url: '/api/jobslink-api/user/user/userCompanyInfo', - method: 'get', - params - }) -} -export const findTradeList = () => { - return request({ - url: '/api/jobslink-api/tenant/trade/base/find', - method: 'get', - // params - }) +import { + request +} from '@/untils/AxiosUtils.js'; +import { + getStore +} from '@/untils/store.js' + +function getHeader() { + const platformId = getStore({ + name: 'platformId' + }) + if (platformId) { + return { + 'Platform-Id': platformId + } + } else { + return {} + } +} +/*首页 最新任务(10条)*/ +export const getPushListByUserId = (params) => { + return request({ + url: '/api/jobslink-api/user/userrecruit/getPushListByUserId', + headers: getHeader(), + method: 'get', + params + + }) +} + +/*岗位详情*/ +// workDetail +export const userrecruitDetail = (workId) => { + return request({ + url: '/api/jobslink-api/user/userrecruit/getWorksInfoByWorkId', + method: 'get', + params: { + workId + } + }) +} + +export const submitInfo = (data) => { + return request({ + url: '/api/jobslink-api/user/userrecruit/saveApp', + method: 'post', + data: data + }) +} + +export const getuserrecruitListApp = (params) => { + return request({ + url: '/api/jobslink-api/user/userrecruit/listApp', + method: 'get', + params + }) +} +export const getuserrecruitDetailApp = (params) => { + return request({ + url: '/api/jobslink-api/user/userrecruit/detailApp', + method: 'get', + params + }) +} + +export const seeIsHaveCodep = (params) => { + return request({ + url: '/api/jobslink-api/tenant/company/app/isHaveCode', + method: 'get', + params + }) +} +export const getWorktypesBaseList = (params) => { + return request({ + url: '/api/jobslink-api/tenant/worktypes/base/list', + method: 'get', + params + }) +} + +export const getUserCompanyInfo = (params) => { + return request({ + url: '/api/jobslink-api/user/user/userCompanyInfo', + method: 'get', + params + }) +} +export const findTradeList = () => { + return request({ + url: '/api/jobslink-api/tenant/trade/base/find', + method: 'get', + // params + }) +} + +export const addInviteCompanyAuth = ({ + params, + data +}) => { + return request({ + url: '/api/jobslink-api/tenant/company/app/inviteCompany/auth', + method: 'post', + data, + params + }) } \ No newline at end of file diff --git a/common/dic.js b/common/dic.js index 06ee0a5..a62bbdc 100644 --- a/common/dic.js +++ b/common/dic.js @@ -1,319 +1,416 @@ -// 发布岗位和个体招工 参考工资 -const salary = [{ - name: "2000元(含)以下/月", - label: "2000元(含)以下/月", - }, - { - name: "2000-5000元(含)/月", - label: "2000-5000元(含)/月", - }, - { - name: "5000-8000元(含)/月", - label: "5000-8000元(含)/月", - }, - { - name: "8000-10000元(含)/月", - label: "8000-10000元(含)/月", - }, - { - name: "10000-15000元(含)/月", - label: "10000-15000元(含)/月", - }, - { - name: "15000-20000元(含)/月", - label: "15000-20000元(含)/月", - }, - { - name: "20000-25000元(含)/月", - label: "20000-25000元(含)/月", - }, - { - name: "25000-30000元(含)/月", - label: "25000-30000元(含)/月", - }, - { - name: "30000元以上/月", - label: "30000元以上/月", - }, - { - name: "面议、暂无要求", - label: "面议、暂无要求", - }, -] -const taskSalary = [ - [ - "10-15元/小时", - "16-20元/小时", - "21-25元/小时", - "26-30元/小时", - "30元/小时以上", - "100-150元/天", - "151-200元/天", - "201-250元/天", - "251-300元/天", - "300元/天以上", - "30000元以上/月", - "面议、暂无要求" - ] -] - -const tradeArr = [ - [{ - "id": "1754327500065390596", - "name": "农、林、牧、渔业", - }, - { - "id": "1754327500065390597", - "name": "采矿业", - }, - { - "id": "1754327500065390598", - "name": "采矿业,制造业", - }, - { - "id": "1754327500065390599", - "name": "制造业", - }, - { - "id": "1754327500065390600", - "name": "电力、热力、燃气及水生产和供应业", - }, - { - "id": "1754327500065390601", - "name": "建筑业", - }, - { - "id": "1754327500065390602", - "name": "批发和零售业", - }, - { - "id": "1754327500065390603", - "name": "交通运输、仓储和邮政业", - }, - { - "id": "1754327500065390604", - "name": "住宿和餐饮业", - }, - { - "id": "1754327500065390605", - "name": "信息传输、软件和信息技术服务业", - }, - { - "id": "1754327500065390606", - "name": "金融业", - }, - { - "id": "1754327500065390607", - "name": "房地产业", - }, - { - "id": "1754327500065390608", - "name": "租赁和商务服务业", - }, - { - "id": "1754327500065390609", - "name": "科学研究和技术服务业", - }, - { - "id": "1754327500065390610", - "name": "水利、环境和公共设施管理业", - }, - { - "id": "1754327500065390611", - "name": "居民服务、修理和其他服务业", - }, - { - "id": "1754327500065390612", - "name": "教育", - }, - { - "id": "1754327500065390613", - "name": "卫生和社会工作", - }, - { - "id": "1754327500065390614", - "name": "文化、体育和娱乐业", - }, - { - "id": "1754327500065390615", - "name": "公共管理、社会保障和社会组织", - }, - { - "id": "1754327500065390616", - "name": "国际组织", - }, - { - "id": "1754327500065390617", - "name": "其他", - }, - // { - // "id": "1754327500065390890", - // "name": "111", - // }, - // { - // "id": "1758061062381690882", - // "name": "11", - // }, - { - "id": "1758102909546467329", - "name": "服务业", - } - ] -] - -const natureArr = [ - ['灵活用工'] -] - -const ageArr = [ - [{ - label: "不限年龄", - value: "不限年龄", - }, - { - label: "30以下", - value: "30以下", - }, - { - label: "35以下", - value: "35以下", - }, - { - label: "40以下", - value: "40以下", - }, - { - label: "45以下", - value: "45以下", - }, - { - label: "50以下", - value: "50以下", - }, - { - label: "55以下", - value: "55以下", - }, - { - label: "60以下", - value: "60以下", - }, - ] -] - -const eduArr = [ - [{ - label: "不限", - value: 8, - }, - { - label: "初中及以下", - value: 7, - }, - { - label: "中专/中技", - value: 6, - }, - { - label: "高中", - value: 5, - }, - { - label: "大专", - value: 4, - }, - { - label: "本科", - value: 3, - }, - { - label: "硕士", - value: 2, - }, - { - label: "博士", - value: 1, - }, - { - label: "MBA/EMBA", - value: 0, - }, - ] -] - -const expeArr = [ - [{ - label: "不限经验", - value: "不限经验", - }, - { - label: "1年以下", - value: "1年以下", - }, - { - label: "1~3年", - value: "1~3年", - }, - { - label: "3~5年", - value: "3~5年", - }, - { - label: "5~10年", - value: "5~10年", - }, - { - label: "10年以上", - value: "10年以上", - }, - ] -] - -const companyEnum = [ - { value: 1, label: "机关/事业单位" }, - { value: 2, label: "国有企业" }, - { value: 3, label: "私营企业" }, - { value: 4, label: "外商及港澳台投资企业" }, - { value: 5, label: "股份制企业" }, - { value: 6, label: "学校/下级学院" }, - { value: 7, label: "医院" }, - { value: 8, label: "律师事务所" }, - { value: 9, label: "银行" }, - { value: 10, label: "非盈利社会组织" }, - { value: 11, label: "其它" }, -] - -const wageUnitCategoryState = [[ - { id: 1, label: "元/人·时", disable: false }, - { id: 2, label: "元/人·天", disable: false }, - { id: 3, label: "元/人·月", disable: false }, - { id: 4, label: "其他", disable: false }, - // { value: 0, label: "元/人·次", disable: true }, - // { value: 4, label: "元/人·周", disable: true }, - // { value: 5, label: "元/人·个", disable: true }, - // { value: 6, label: "元/人·件", disable: true }, -]]; - -const workwageUnitCategoryState = [[ - // { id: 1, label: "元/人·时", disable: false }, - // { id: 2, label: "元/人·天", disable: false }, - { id: 3, label: "元/人·月", disable: true }, - { id: 4, label: "其他", disable: true }, - // { value: 0, label: "元/人·次", disable: true }, - // { value: 4, label: "元/人·周", disable: true }, - // { value: 5, label: "元/人·个", disable: true }, - // { value: 6, label: "元/人·件", disable: true }, -]]; - -export default { - salary, - taskSalary, - tradeArr, - natureArr, - ageArr, - eduArr, - expeArr, - companyEnum, - wageUnitCategoryState, - workwageUnitCategoryState +// 发布岗位和个体招工 参考工资 +const salary = [{ + name: "2000元(含)以下/月", + label: "2000元(含)以下/月", + }, + { + name: "2000-5000元(含)/月", + label: "2000-5000元(含)/月", + }, + { + name: "5000-8000元(含)/月", + label: "5000-8000元(含)/月", + }, + { + name: "8000-10000元(含)/月", + label: "8000-10000元(含)/月", + }, + { + name: "10000-15000元(含)/月", + label: "10000-15000元(含)/月", + }, + { + name: "15000-20000元(含)/月", + label: "15000-20000元(含)/月", + }, + { + name: "20000-25000元(含)/月", + label: "20000-25000元(含)/月", + }, + { + name: "25000-30000元(含)/月", + label: "25000-30000元(含)/月", + }, + { + name: "30000元以上/月", + label: "30000元以上/月", + }, + { + name: "面议、暂无要求", + label: "面议、暂无要求", + }, +] +const taskSalary = [ + [ + "10-15元/小时", + "16-20元/小时", + "21-25元/小时", + "26-30元/小时", + "30元/小时以上", + "100-150元/天", + "151-200元/天", + "201-250元/天", + "251-300元/天", + "300元/天以上", + "30000元以上/月", + "面议、暂无要求" + ] +] + +const tradeArr = [ + [{ + "id": "1754327500065390596", + "name": "农、林、牧、渔业", + }, + { + "id": "1754327500065390597", + "name": "采矿业", + }, + { + "id": "1754327500065390598", + "name": "采矿业,制造业", + }, + { + "id": "1754327500065390599", + "name": "制造业", + }, + { + "id": "1754327500065390600", + "name": "电力、热力、燃气及水生产和供应业", + }, + { + "id": "1754327500065390601", + "name": "建筑业", + }, + { + "id": "1754327500065390602", + "name": "批发和零售业", + }, + { + "id": "1754327500065390603", + "name": "交通运输、仓储和邮政业", + }, + { + "id": "1754327500065390604", + "name": "住宿和餐饮业", + }, + { + "id": "1754327500065390605", + "name": "信息传输、软件和信息技术服务业", + }, + { + "id": "1754327500065390606", + "name": "金融业", + }, + { + "id": "1754327500065390607", + "name": "房地产业", + }, + { + "id": "1754327500065390608", + "name": "租赁和商务服务业", + }, + { + "id": "1754327500065390609", + "name": "科学研究和技术服务业", + }, + { + "id": "1754327500065390610", + "name": "水利、环境和公共设施管理业", + }, + { + "id": "1754327500065390611", + "name": "居民服务、修理和其他服务业", + }, + { + "id": "1754327500065390612", + "name": "教育", + }, + { + "id": "1754327500065390613", + "name": "卫生和社会工作", + }, + { + "id": "1754327500065390614", + "name": "文化、体育和娱乐业", + }, + { + "id": "1754327500065390615", + "name": "公共管理、社会保障和社会组织", + }, + { + "id": "1754327500065390616", + "name": "国际组织", + }, + { + "id": "1754327500065390617", + "name": "其他", + }, + // { + // "id": "1754327500065390890", + // "name": "111", + // }, + // { + // "id": "1758061062381690882", + // "name": "11", + // }, + { + "id": "1758102909546467329", + "name": "服务业", + } + ] +] + +const natureArr = [ + ['灵活用工'] +] + +const ageArr = [ + [{ + label: "不限年龄", + value: "不限年龄", + }, + { + label: "30以下", + value: "30以下", + }, + { + label: "35以下", + value: "35以下", + }, + { + label: "40以下", + value: "40以下", + }, + { + label: "45以下", + value: "45以下", + }, + { + label: "50以下", + value: "50以下", + }, + { + label: "55以下", + value: "55以下", + }, + { + label: "60以下", + value: "60以下", + }, + ] +] + +const eduArr = [ + [{ + label: "不限", + value: 8, + }, + { + label: "初中及以下", + value: 7, + }, + { + label: "中专/中技", + value: 6, + }, + { + label: "高中", + value: 5, + }, + { + label: "大专", + value: 4, + }, + { + label: "本科", + value: 3, + }, + { + label: "硕士", + value: 2, + }, + { + label: "博士", + value: 1, + }, + { + label: "MBA/EMBA", + value: 0, + }, + ] +] + +const expeArr = [ + [{ + label: "不限经验", + value: "不限经验", + }, + { + label: "1年以下", + value: "1年以下", + }, + { + label: "1~3年", + value: "1~3年", + }, + { + label: "3~5年", + value: "3~5年", + }, + { + label: "5~10年", + value: "5~10年", + }, + { + label: "10年以上", + value: "10年以上", + }, + ] +] + +const companyEnum = [{ + value: 1, + label: "机关/事业单位" + }, + { + value: 2, + label: "国有企业" + }, + { + value: 3, + label: "私营企业" + }, + { + value: 4, + label: "外商及港澳台投资企业" + }, + { + value: 5, + label: "股份制企业" + }, + { + value: 6, + label: "学校/下级学院" + }, + { + value: 7, + label: "医院" + }, + { + value: 8, + label: "律师事务所" + }, + { + value: 9, + label: "银行" + }, + { + value: 10, + label: "非盈利社会组织" + }, + { + value: 11, + label: "其它" + }, +] + +const wageUnitCategoryState = [ + [{ + id: 1, + label: "元/人·时", + disable: false + }, + { + id: 2, + label: "元/人·天", + disable: false + }, + { + id: 3, + label: "元/人·月", + disable: false + }, + { + id: 4, + label: "其他", + disable: false + }, + // { value: 0, label: "元/人·次", disable: true }, + // { value: 4, label: "元/人·周", disable: true }, + // { value: 5, label: "元/人·个", disable: true }, + // { value: 6, label: "元/人·件", disable: true }, + ] +]; + +const workwageUnitCategoryState = [ + [ + // { id: 1, label: "元/人·时", disable: false }, + // { id: 2, label: "元/人·天", disable: false }, + { + id: 3, + label: "元/人·月", + disable: true + }, + { + id: 4, + label: "其他", + disable: true + }, + // { value: 0, label: "元/人·次", disable: true }, + // { value: 4, label: "元/人·周", disable: true }, + // { value: 5, label: "元/人·个", disable: true }, + // { value: 6, label: "元/人·件", disable: true }, + ] +]; + + +const addressColumn = [ + [{ + value: '95', + label: "绵竹市" + }, + { + value: '185', + label: "绵竹市" + }, + { + value: '143', + label: "旌阳区" + }, + { + value: '150', + label: "罗江区" + }, + { + value: '42', + label: "什邡市" + }, + { + value: '156', + label: "中江县" + }, + { + value: '44139628', + label: "经济技术开发区" + }, + { + value: '79194151', + label: "德阳市开发区" + }, + ] +] + +export default { + salary, + taskSalary, + tradeArr, + natureArr, + ageArr, + eduArr, + expeArr, + companyEnum, + wageUnitCategoryState, + workwageUnitCategoryState, + addressColumn } \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue index f6fd6f2..fb9db3d 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,956 +1,984 @@ - - - - - + + + + + \ No newline at end of file diff --git a/pages/recruit/recruit.vue b/pages/recruit/recruit.vue index 568cb3d..11c1b76 100644 --- a/pages/recruit/recruit.vue +++ b/pages/recruit/recruit.vue @@ -1,109 +1,126 @@ - - - - - + + + + + \ No newline at end of file diff --git a/pages/recruit/subPage/enterpriceCertification/enterpriceCertification.vue b/pages/recruit/subPage/enterpriceCertification/enterpriceCertification.vue index b1efd9e..b1265ec 100644 --- a/pages/recruit/subPage/enterpriceCertification/enterpriceCertification.vue +++ b/pages/recruit/subPage/enterpriceCertification/enterpriceCertification.vue @@ -1,54 +1,100 @@ \ No newline at end of file diff --git a/pages/recruit/subPage/enterpriceCertification/pickerList.vue b/pages/recruit/subPage/enterpriceCertification/pickerList.vue new file mode 100644 index 0000000..c7d9c87 --- /dev/null +++ b/pages/recruit/subPage/enterpriceCertification/pickerList.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/pages/recruit/subPage/enterpriceCertification/uploadIdNumber.vue b/pages/recruit/subPage/enterpriceCertification/uploadIdNumber.vue new file mode 100644 index 0000000..05a0a46 --- /dev/null +++ b/pages/recruit/subPage/enterpriceCertification/uploadIdNumber.vue @@ -0,0 +1,53 @@ + + + + + \ No newline at end of file diff --git a/static/font/font_2225171_8kdcwk4po24.ttf b/static/font/font_2225171_8kdcwk4po24.ttf new file mode 100644 index 0000000000000000000000000000000000000000..befa24aa2bbbbec7d99e86cdb1428fc53938b6b7 GIT binary patch literal 55940 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 Rirfa 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 literal 0 HcmV?d00001 diff --git a/store/models/user.js b/store/models/user.js index 2975fe9..245af73 100644 --- a/store/models/user.js +++ b/store/models/user.js @@ -1,241 +1,244 @@ -import { - isURL, - validatenull -} from '@/untils/validate.js' -import website from '@/config/website' -import { - loginByUsername, - getUserInfo, - logout, - refreshToken -} from '@/api/user' -import md5 from 'js-md5' -import { - getStore, - setStore -} from '@/untils/store.js' -import { - calcDate -} from '@/untils/date.js' - -let refreshTimer = null; - -function startRefreshToken(dispatch) { - refreshTimer = setInterval(() => { - const token = - getStore({ - name: "token", - debug: true - }) || {}; - const date = calcDate(token.datetime, new Date().getTime()); - if (validatenull(date)) return; - if (date.seconds >= website.tokenTime) { - dispatch("refreshToken") - .then(() => {}) - .catch(() => {}); - } - }, 10000); -} - -function stopRefreshToken() { - clearInterval(refreshTimer) -} - -const user = { - state: { - tenantId: getStore({ - name: 'tenantId' - }) || '', - userInfo: getStore({ - name: 'userInfo' - }) || [], - token: getStore({ - name: 'token' - }) || '', - refreshToken: getStore({ - name: 'refreshToken' - }) || '', - userChecked:getStore({ - name: 'setUserCheckValue' - }) || false, - sendTimes:getStore({//用户发送短信次数 - name:'setUserSendTimes' - }) || 0, - seeEnterprise: getStore({//用户发送短信次数 - name:'enterprise' - }) || 0, // 0 个体招工 ; 企业招工 - }, - actions: { - //用户点击radio按钮 - UserCheckedBtn({commit},val){ - commit('SET_USER_CHECKED',val); - }, - //根据用户名登录 - LoginByUsername({ - commit, - dispatch - }, userInfo) { - return new Promise((resolve, reject) => { - loginByUsername(userInfo.tenantId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, - userInfo.code, userInfo.token).then(res => { - - const data = res.data; - if (data.error_description) { - uni.showToast({ - icon: "none", - title: data.error_description, - }) - } else { - commit('SET_TOKEN', data.access_token); - commit('SET_REFRESH_TOKEN', data.refresh_token); - commit('SET_TENANT_ID', data.tenant_id); - commit('SET_USER_INFO', data); - dispatch('refreshAuthState') - dispatch('startRefreshNewsTimer') - startRefreshToken(); - } - resolve(res); - }).catch(error => { - reject(error); - }) - }) - }, - //根据手机号登录 - LoginByPhone({ - commit - }, userInfo) { - return new Promise((resolve) => { - loginByUsername(userInfo.phone, userInfo.code).then(res => { - const data = res.data.data; - commit('SET_TOKEN', data); - resolve(); - }) - }) - }, - GetUserInfo({ - commit - }) { - return new Promise((resolve, reject) => { - getUserInfo().then((res) => { - const data = res.data.data; - resolve(data); - }).catch(err => { - reject(err); - }) - }) - }, - //刷新token - refreshToken({ - state, - commit, - dispatch - }) { - return new Promise((resolve, reject) => { - refreshToken(state.refreshToken, state.tenantId).then(res => { - const data = res.data; - dispatch('refreshAuthState') - commit('SET_TOKEN', data.access_token); - commit('SET_REFRESH_TOKEN', data.refresh_token); - resolve(); - }).catch(error => { - reject(error) - }) - }) - }, - // 登出 - LogOut({ - dispatch, - commit - }) { - return new Promise((resolve, reject) => { - logout(); - stopRefreshToken(); - commit('SET_TOKEN', ''); - commit('SET_VIPCODE', '0'); - resolve(); - }) - }, - //注销session - FedLogOut({ - commit - }) { - return new Promise(resolve => { - commit('SET_TOKEN', ''); - resolve(); - }) - }, - startRefreshTokenTimer({ - state, - commit, - dispatch - }) { - if (state.token) { - dispatch('refreshToken').then(() => { - startRefreshToken(dispatch); - }) - } - }, - //更新用户接收短信次数 - UpdateUserSendTimes({ - commit - }, data) { - commit('SET_USER_SENDTIMES',data); - }, - }, - mutations: { - setEnterprise(state, val) { // 0 个体招工 ; 企业招工 - state.seeEnterprise = val; - setStore({ - name: 'enterprise', - content: val, - }) - }, - SET_TOKEN: (state, token) => { - state.token = token; - setStore({ - name: 'token', - content: state.token, - type: 'session' - }) - }, - SET_REFRESH_TOKEN: (state, refreshToken) => { - state.refreshToken = refreshToken; - setStore({ - name: 'refreshToken', - content: state.refreshToken, - type: 'session' - }) - }, - SET_TENANT_ID: (state, tenantId) => { - state.tenantId = tenantId; - setStore({ - name: 'tenantId', - content: state.tenantId, - type: 'session' - }) - }, - SET_USER_INFO: (state, userInfo) => { - state.userInfo = userInfo; - setStore({ - name: 'userInfo', - content: state.userInfo - }) - }, - SET_USER_CHECKED:(state,val)=>{ - state.userChecked=val; - setStore({ - name: 'setUserCheckValue', - content: state.userChecked - }) - }, - SET_USER_SENDTIMES:(state,val)=>{ - state.sendTimes=val; - setStore({ - name: 'setUserSendTimes', - content: state.sendTimes - }) - }, - - } -} -export default user +import { + isURL, + validatenull +} from '@/untils/validate.js' +import website from '@/config/website' +import { + loginByUsername, + getUserInfo, + logout, + refreshToken +} from '@/api/user' +import md5 from 'js-md5' +import { + getStore, + setStore +} from '@/untils/store.js' +import { + calcDate +} from '@/untils/date.js' + +let refreshTimer = null; + +function startRefreshToken(dispatch) { + refreshTimer = setInterval(() => { + const token = + getStore({ + name: "token", + debug: true + }) || {}; + const date = calcDate(token.datetime, new Date().getTime()); + if (validatenull(date)) return; + if (date.seconds >= website.tokenTime) { + dispatch("refreshToken") + .then(() => {}) + .catch(() => {}); + } + }, 10000); +} + +function stopRefreshToken() { + clearInterval(refreshTimer) +} + +const user = { + state: { + tenantId: getStore({ + name: 'tenantId' + }) || '', + userInfo: getStore({ + name: 'userInfo' + }) || [], + token: getStore({ + name: 'token' + }) || '', + refreshToken: getStore({ + name: 'refreshToken' + }) || '', + userChecked: getStore({ + name: 'setUserCheckValue' + }) || false, + sendTimes: getStore({ //用户发送短信次数 + name: 'setUserSendTimes' + }) || 0, + seeEnterprise: getStore({ //用户发送短信次数 + name: 'enterprise' + }) || 0, // 0 个体招工 ; 企业招工 + }, + actions: { + //用户点击radio按钮 + UserCheckedBtn({ + commit + }, val) { + commit('SET_USER_CHECKED', val); + }, + //根据用户名登录 + LoginByUsername({ + commit, + dispatch + }, userInfo) { + return new Promise((resolve, reject) => { + loginByUsername(userInfo.tenantId, userInfo.username, md5(userInfo.password), userInfo.type, + userInfo.key, + userInfo.code, userInfo.token).then(res => { + + const data = res.data; + if (data.error_description) { + uni.showToast({ + icon: "none", + title: data.error_description, + }) + } else { + commit('SET_TOKEN', data.access_token); + commit('SET_REFRESH_TOKEN', data.refresh_token); + commit('SET_TENANT_ID', data.tenant_id); + commit('SET_USER_INFO', data); + dispatch('refreshAuthState') + dispatch('startRefreshNewsTimer') + startRefreshToken(); + } + resolve(res); + }).catch(error => { + reject(error); + }) + }) + }, + //根据手机号登录 + LoginByPhone({ + commit + }, userInfo) { + return new Promise((resolve) => { + loginByUsername(userInfo.phone, userInfo.code).then(res => { + const data = res.data.data; + commit('SET_TOKEN', data); + resolve(); + }) + }) + }, + GetUserInfo({ + commit + }) { + return new Promise((resolve, reject) => { + getUserInfo().then((res) => { + const data = res.data.data; + resolve(data); + }).catch(err => { + reject(err); + }) + }) + }, + //刷新token + refreshToken({ + state, + commit, + dispatch + }) { + return new Promise((resolve, reject) => { + refreshToken(state.refreshToken, state.tenantId).then(res => { + const data = res.data; + dispatch('refreshAuthState') + commit('SET_TOKEN', data.access_token); + commit('SET_REFRESH_TOKEN', data.refresh_token); + resolve(); + }).catch(error => { + reject(error) + }) + }) + }, + // 登出 + LogOut({ + dispatch, + commit + }) { + return new Promise((resolve, reject) => { + logout(); + stopRefreshToken(); + commit('SET_TOKEN', ''); + commit('SET_VIPCODE', '0'); + resolve(); + }) + }, + //注销session + FedLogOut({ + commit + }) { + return new Promise(resolve => { + commit('SET_TOKEN', ''); + resolve(); + }) + }, + startRefreshTokenTimer({ + state, + commit, + dispatch + }) { + if (state.token) { + dispatch('refreshToken').then(() => { + startRefreshToken(dispatch); + }) + } + }, + //更新用户接收短信次数 + UpdateUserSendTimes({ + commit + }, data) { + commit('SET_USER_SENDTIMES', data); + }, + }, + mutations: { + setEnterprise(state, val) { // 0 个体招工 ; 企业招工 + state.seeEnterprise = val; + setStore({ + name: 'enterprise', + content: val, + }) + }, + SET_TOKEN: (state, token) => { + state.token = token; + setStore({ + name: 'token', + content: state.token, + type: 'session' + }) + }, + SET_REFRESH_TOKEN: (state, refreshToken) => { + state.refreshToken = refreshToken; + setStore({ + name: 'refreshToken', + content: state.refreshToken, + type: 'session' + }) + }, + SET_TENANT_ID: (state, tenantId) => { + state.tenantId = tenantId; + setStore({ + name: 'tenantId', + content: state.tenantId, + type: 'session' + }) + }, + SET_USER_INFO: (state, userInfo) => { + state.userInfo = userInfo; + setStore({ + name: 'userInfo', + content: state.userInfo + }) + }, + SET_USER_CHECKED: (state, val) => { + state.userChecked = val; + setStore({ + name: 'setUserCheckValue', + content: state.userChecked + }) + }, + SET_USER_SENDTIMES: (state, val) => { + state.sendTimes = val; + setStore({ + name: 'setUserSendTimes', + content: state.sendTimes + }) + }, + + } +} +export default user \ No newline at end of file diff --git a/vue.config.js b/vue.config.js index d942576..a412b25 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,22 +1,22 @@ -module.exports = { - devServer: { - port: 1887, - proxy: { - '/api': { - target: 'http://10.165.0.173:8000', - ws: true, - pathRewrite: { - '^/api': '/' - } - }, - '/qq/map': { - //本地服务接口地址 - target: 'https://apis.map.qq.com', - ws: true, - pathRewrite: { - '^/qq/map': '/' - } - } - } - } -}; +module.exports = { + devServer: { + port: 1887, + proxy: { + '/api': { + target: 'http://192.168.1.106:8000', + ws: true, + pathRewrite: { + '^/api': '/' + } + }, + '/qq/map': { + //本地服务接口地址 + target: 'https://apis.map.qq.com', + ws: true, + pathRewrite: { + '^/qq/map': '/' + } + } + } + } +}; \ No newline at end of file