|
|
@@ -1,335 +0,0 @@
|
|
|
-<template>
|
|
|
- <div :class="{ isMobile: mobile }">
|
|
|
- <!-- web -->
|
|
|
- <div v-if="!mobile">
|
|
|
- <div class="companyList">
|
|
|
- <div class="contentArea">
|
|
|
- <div class="filter-box">
|
|
|
- <h3 class="filter-title">国内地区</h3>
|
|
|
- <div class="filter-content">
|
|
|
- <a href="/company/list" :class="currentCity === undefined ? 'on' : 'notOn'">全部</a>
|
|
|
- <a
|
|
|
- :href="`/company/list/${item.slug}`"
|
|
|
- v-for="item in cityList"
|
|
|
- :key="'city' + item.id"
|
|
|
- :class="currentCity === item.slug ? 'on' : 'notOn'"
|
|
|
- :title="item.name">
|
|
|
- {{ item.name }}
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="company-list-wrapper" v-loading="loading">
|
|
|
- <a
|
|
|
- v-for="item in companyList"
|
|
|
- :key="'company' + item.uid"
|
|
|
- :href="`${siteUrl}/company/${item.uid}`"
|
|
|
- class="company-item">
|
|
|
- <img :src="item.logo" alt="logo" class="logo">
|
|
|
- <div class="company-info">
|
|
|
- <div class="name">{{ item.name }}</div>
|
|
|
- <div class="intro">{{ item.brief_introduction }}</div>
|
|
|
- </div>
|
|
|
- <div class="recruit-info">
|
|
|
- <span class="num">{{ item.recruit_num || 0 }}</span>
|
|
|
- <span class="title">在招职位</span>
|
|
|
- </div>
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="pagination">
|
|
|
- <el-pagination
|
|
|
- v-if="!isSeoList"
|
|
|
- background
|
|
|
- layout="total, prev, pager, next"
|
|
|
- :total="page.total"
|
|
|
- :page-size="page.pageSize"
|
|
|
- @current-change="pageChange"
|
|
|
- :current-page="Number(page.current)">
|
|
|
- </el-pagination>
|
|
|
- <div v-else>
|
|
|
- <div class="list">
|
|
|
- <nuxt-link
|
|
|
- v-for="(item, index) in new Array(Math.ceil(page.total / page.size))"
|
|
|
- :to="`/?page=${index + 1}`"
|
|
|
- :key="page + index">
|
|
|
- {{ index + 1 }}
|
|
|
- </nuxt-link>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- mobile -->
|
|
|
- <div v-else class="jobListMobile">
|
|
|
- 公司列表 mobile
|
|
|
- <a v-if="!deviceType.app && mobile && !isBaiduxapp && !isWxapp" :class="{'downapp':isShowDownLoad}" :href="downloadhref">下载APP</a>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-
|
|
|
-<script>
|
|
|
- import {mapState, mapMutations} from "vuex";
|
|
|
- import deviceType from "../../../plugins/deviceType";
|
|
|
-
|
|
|
- export default {
|
|
|
- name: "CompanyList",
|
|
|
- showCommonFooter: false,
|
|
|
- data() {
|
|
|
- return {
|
|
|
- isShowToast: false,
|
|
|
- name: "",
|
|
|
- loading: false,
|
|
|
- refreshing: false,
|
|
|
- firstLoading: false, //移动端加载loading
|
|
|
- isLoading: false,
|
|
|
- selected: {},
|
|
|
- downloadhref: "",
|
|
|
- type: "",
|
|
|
- isShowDownLoad: false,
|
|
|
- isBaiduxapp: false,
|
|
|
- isWxapp: true,
|
|
|
- siteUrl: "",
|
|
|
- jobUrl:"",
|
|
|
- isSeoList: false,
|
|
|
- currentCity: undefined,
|
|
|
- };
|
|
|
- },
|
|
|
- head() {
|
|
|
- const {
|
|
|
- title = "",
|
|
|
- keyword = "",
|
|
|
- description = "",
|
|
|
- h1 = "",
|
|
|
- canonical = "",
|
|
|
- metaLocation
|
|
|
- } = this.head || {};
|
|
|
- let obj = {
|
|
|
- title: title || '企业列表 - 程序员客栈',
|
|
|
- meta: [
|
|
|
- {
|
|
|
- name: "keywords",
|
|
|
- content: keyword
|
|
|
- },
|
|
|
- {
|
|
|
- name: "description",
|
|
|
- content: description
|
|
|
- },
|
|
|
- {
|
|
|
- name: "h1",
|
|
|
- content: h1
|
|
|
- }
|
|
|
- ],
|
|
|
- link: [{rel: "canonical", href: canonical}]
|
|
|
- };
|
|
|
- if (metaLocation) {
|
|
|
- obj.meta.push({name: "location", content: metaLocation});
|
|
|
- }
|
|
|
- return obj;
|
|
|
- },
|
|
|
- async asyncData({...params}) {
|
|
|
- console.log("*********params:", params);
|
|
|
- // return {
|
|
|
- // mobile: params.app.$deviceType.isMobile(),
|
|
|
- // cityList: [],
|
|
|
- // companyList: [],
|
|
|
- // page: {
|
|
|
- // current: 1,
|
|
|
- // pageSize: 20,
|
|
|
- // total: 100
|
|
|
- // },
|
|
|
- // currentCity: undefined
|
|
|
- // }
|
|
|
- try {
|
|
|
- params.store.commit("updateNoneCommonFooter", false);
|
|
|
- } catch (e) {
|
|
|
- console.log("updateNoneCommonFooter", e);
|
|
|
- }
|
|
|
- // 提前获取 route.params
|
|
|
- const { city } = params.app.context.params
|
|
|
- // 获取城市列表
|
|
|
- let cityList = []
|
|
|
- let cityOpId = ''
|
|
|
- const cityRes = await params.$axios.$post('/api/CompanyInfo/getCity')
|
|
|
- if (Number(cityRes.status) === 1) {
|
|
|
- cityList = cityRes.data || []
|
|
|
- // let cityObject = cityRes.data || {}
|
|
|
- // cityList = Object.values(cityObject)
|
|
|
- // 还需要过滤 is_hot = 0 的城市
|
|
|
- // cityList = Object.values(cityObject).filter(item => item.is_hot > 0)
|
|
|
-
|
|
|
- // url 中的 city slug 换取 cityOpId
|
|
|
- if (city && cityList && cityList.length) {
|
|
|
- for (let i = 0; i < cityList.length; i++) {
|
|
|
- if (cityList[i].slug === city) {
|
|
|
- cityOpId = cityList[i].id
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // 获取公司列表
|
|
|
- let companyList = []
|
|
|
- let page = {
|
|
|
- total: 0,
|
|
|
- pageSize: 20,
|
|
|
- current: 1,
|
|
|
- cityOpId: cityOpId || ''
|
|
|
- }
|
|
|
- let getCompanyListParams = {}
|
|
|
- if (cityOpId) {
|
|
|
- getCompanyListParams.city_op_id = cityOpId
|
|
|
- }
|
|
|
- const companyRes = await params.$axios.$post('/api/CompanyInfo/getCompanyList', getCompanyListParams)
|
|
|
- if (Number(companyRes.status) === 1) {
|
|
|
- companyList = companyRes.data.list || []
|
|
|
- page.total = Number(companyRes.data.total) || 0
|
|
|
- }
|
|
|
-
|
|
|
- console.log(companyRes)
|
|
|
-
|
|
|
- return {
|
|
|
- mobile: params.app.$deviceType.isMobile(),
|
|
|
- cityList: cityList,
|
|
|
- companyList: companyList,
|
|
|
- page: page,
|
|
|
- currentCity: city || undefined
|
|
|
- };
|
|
|
- },
|
|
|
- watch: {},
|
|
|
- computed: {
|
|
|
- ...mapState(["isPC", "isWeixin", "deviceType", "noneCommonFooter"]),
|
|
|
- },
|
|
|
- created() {
|
|
|
- console.log("created................");
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- console.log("mounted................");
|
|
|
- if (this.mobile) {
|
|
|
- document.body.style = "overflow:hidden;";
|
|
|
- }
|
|
|
-
|
|
|
- let UA = navigator.userAgent;
|
|
|
- console.log("-------------", UA);
|
|
|
- this.isWxapp = UA.indexOf('miniProgram') > -1;
|
|
|
- console.error(this.isWxapp ? "是微信" : "不是微信");
|
|
|
- this.isBaiduxapp = navigator.userAgent.indexOf('swan/') > -1;
|
|
|
- console.log(this.$route.params);
|
|
|
- var isAndroid = UA.indexOf("Android") > -1 || UA.indexOf("Adr") > -1; //android终端
|
|
|
- console.error(isAndroid ? "是安卓" : "不是安卓");
|
|
|
- var isiOS = !!UA.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
|
|
|
- console.error(isiOS ? "是IOS" : "不是IOS");
|
|
|
-
|
|
|
- if (this.isWxapp) {
|
|
|
- this.downloadhref =
|
|
|
- "http://a.app.qq.com/o/simple.jsp?pkgname=com.proginn";
|
|
|
- } else if (isAndroid) {
|
|
|
- this.downloadhref =
|
|
|
- "http://inncms.storage.proginn.com/android/proginn-v4.10.0.apk";
|
|
|
- } else if (isiOS) {
|
|
|
- this.downloadhref =
|
|
|
- "https://itunes.apple.com/cn/app/cheng-xu-yuan-ke-zhan/id979914687";
|
|
|
- }
|
|
|
- console.log("this.downloadhref =", this.downloadhref);
|
|
|
-
|
|
|
- this.type = deviceType.app ? "APP" : "浏览器";
|
|
|
-
|
|
|
- setTimeout(() => {
|
|
|
- this.isShowDownLoad = true;
|
|
|
- console.log("this.isShowDownload=", this.isShowDownLoad);
|
|
|
- }, 500)
|
|
|
-
|
|
|
- let ua = navigator.userAgent;
|
|
|
-
|
|
|
- this.isBaiduxapp = navigator.userAgent.indexOf('swan/') > -1;
|
|
|
- console.log(this.$route.params);
|
|
|
- // this.isWxapp = this.$route.query.isWxMini && this.$route.query.isWxMini == 1;
|
|
|
-
|
|
|
- this.siteUrl = this.$store.state.domainConfig.siteUrl
|
|
|
- this.jobUrl = this.$store.state.domainConfig.jobUrl
|
|
|
- },
|
|
|
- methods: {
|
|
|
- /**
|
|
|
- * 获取公司列表
|
|
|
- */
|
|
|
- _getCompanyList () {
|
|
|
- const { page } = this
|
|
|
- let params = {
|
|
|
- page: Number(page.current),
|
|
|
- size: page.pageSize
|
|
|
- }
|
|
|
- if (page.cityOpId) {
|
|
|
- params.city_op_id = page.cityOpId
|
|
|
- }
|
|
|
-
|
|
|
- if (this.isLoading) {
|
|
|
- return;
|
|
|
- }
|
|
|
- this.loading = true;
|
|
|
- this.isLoading = true;
|
|
|
-
|
|
|
- this.$axios.$post('/api/CompanyInfo/getCompanyList', params).then((res) => {
|
|
|
- console.log(res)
|
|
|
- if (Number(res.status) === 1) {
|
|
|
- let data = res.data
|
|
|
- this.page.total = Number(data.total) || 0
|
|
|
- if (this.page.page === 1 || !this.mobile) {
|
|
|
- this.companyList = [...data.list]
|
|
|
- } else {
|
|
|
- this.companyList = [...this.companyList, ...data.list]
|
|
|
- }
|
|
|
- if (this.page.total <= this.companyList.length) {
|
|
|
- this.finished = true;
|
|
|
- }
|
|
|
- }
|
|
|
- }).finally(() => {
|
|
|
- this.firstLoading = false;
|
|
|
- this.refreshing = false;
|
|
|
- this.isLoading = false;
|
|
|
- this.$nextTick(() => {
|
|
|
- this.loading = false;
|
|
|
- });
|
|
|
- console.log(
|
|
|
- "this.finished................................",
|
|
|
- this.finished
|
|
|
- );
|
|
|
- });
|
|
|
- },
|
|
|
- pageChange(i) {
|
|
|
- this.page.current = i;
|
|
|
- this._getCompanyList();
|
|
|
- },
|
|
|
- /** 移动端下拉刷新 **/
|
|
|
- onRefresh() {
|
|
|
- // 清空列表数据
|
|
|
- this.finished = false;
|
|
|
- console.log("onRefresh");
|
|
|
- this.onLoad();
|
|
|
- },
|
|
|
- onLoad() {
|
|
|
- console.log("onLoad");
|
|
|
- this.getList();
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
-</script>
|
|
|
-
|
|
|
-<style scope lang="scss">
|
|
|
-@import "../../../assets/css/company/index.scss";
|
|
|
-.main {
|
|
|
- margin-top: 20px !important;
|
|
|
- margin-bottom: 0 !important;
|
|
|
-}
|
|
|
-</style>
|
|
|
-<style lang="scss">
|
|
|
-.downapp {
|
|
|
-position: absolute;
|
|
|
-bottom: 0;
|
|
|
-z-index: 1000;
|
|
|
-width: 100vw;
|
|
|
-height: 50px;
|
|
|
-background: cornflowerblue;
|
|
|
-color: white;
|
|
|
-font-size: 15px;
|
|
|
-text-align: center;
|
|
|
-line-height: 50px;
|
|
|
-}
|
|
|
-</style>
|