zs 9 ヶ月 前
コミット
8eaba679dc

+ 1 - 1
src/lang/package/zh-cn/pages.js

@@ -200,7 +200,7 @@ export default {
     tags: '标签',
     type: '类型',
     match_type: '赛事类型',
-    href: '路由',
+    href: '跳转链接',
     work: '组织单位',
     industry: '所属产业',
     form: '类别',

+ 40 - 0
src/store/api/user/school.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/school'
+const axios = new AxiosWrapper()
+
+export const SchoolStore = defineStore('school', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 20 - 5
src/views/user/user/index.vue

@@ -25,6 +25,7 @@
           <competition v-if="type == 'Competition'"></competition>
           <investment v-if="type == 'Investment'"></investment>
           <association v-if="type == 'Association'"></association>
+          <school v-if="type == 'School'"></school>
           <state v-if="type == 'State'"></state>
           <unit v-if="type == 'Unit'"></unit>
         </el-col>
@@ -45,6 +46,7 @@ import { cloneDeep, get } from 'lodash-es'
 // 组件
 import user from './parts/user.vue'
 import association from './parts/association.vue'
+import school from './parts/school.vue'
 import company from './parts/company.vue'
 import competition from './parts/competition.vue'
 import expert from './parts/expert.vue'
@@ -68,6 +70,8 @@ import { ExpertStore } from '@/store/api/user/expert'
 const expertStore = ExpertStore()
 import { AssociationStore } from '@/store/api/user/association'
 const associationStore = AssociationStore()
+import { SchoolStore } from '@/store/api/user/school'
+const schoolStore = SchoolStore()
 import { CompanyStore } from '@/store/api/user/company'
 const companyStore = CompanyStore()
 import { CompetitionStore } from '@/store/api/user/competition'
@@ -98,11 +102,11 @@ onMounted(async () => {
 const fields = [
   { label: t('pages.user.openid'), model: 'openid' },
   { label: t('pages.user.account'), model: 'account', filter: true },
-  { label: t('pages.user.industry'), model: 'industry', filter: true, type: 'select' },
+  { label: t('pages.user.industry'), model: 'industry', filter: true, type: 'select', format: (i) => getDict(i, 'industry') },
   { label: t('pages.user.nick_name'), model: 'nick_name', filter: true },
   { label: t('pages.user.phone'), model: 'phone', filter: true },
   { label: t('pages.user.role'), model: 'role', custom: true },
-  { label: t('pages.user.status'), model: 'status', format: (i) => getDict(i) }
+  { label: t('pages.user.status'), model: 'status', format: (i) => getDict(i, 'status') }
 ]
 const opera = [
   { label: t('common.view'), method: 'view' },
@@ -206,9 +210,16 @@ const getRole = (data) => {
   const res = roleList.value.find((f) => f.code === data)
   return get(res, 'name')
 }
-const getDict = (data) => {
-  const res = statusList.value.find((f) => f.value == data)
-  return get(res, 'label')
+const getDict = (data, model) => {
+  if (data) {
+    let res
+    if (model == 'status') res = statusList.value.find((f) => f.value == data)
+    else if (model == 'industry') {
+      if (Array.isArray(data)) res = { label: data.join(',') }
+      else res = { label: data }
+    }
+    return get(res, 'label')
+  }
 }
 // 查看
 const toView = async (data) => {
@@ -232,6 +243,8 @@ const toChang = async (name) => {
       result = await unitStore.query({ user: user_id.value })
     } else if (name == 'Association') {
       result = await associationStore.query({ user: user_id.value })
+    } else if (name == 'School') {
+      result = await schoolStore.query({ user: user_id.value })
     } else if (name == 'Competition') {
       result = await competitionStore.query({ user: user_id.value })
     } else if (name == 'Incubator') {
@@ -252,6 +265,7 @@ const onSubmit = async () => {
   else if (type.value == 'Company') res = await companyStore.update(data)
   else if (type.value == 'Unit') res = await unitStore.update(data)
   else if (type.value == 'Association') res = await associationStore.update(data)
+  else if (type.value == 'School') res = await schoolStore.update(data)
   else if (type.value == 'Competition') res = await competitionStore.update(data)
   else if (type.value == 'Incubator') res = await incubatorStore.update(data)
   else if (type.value == 'Investment') res = await investmentStore.update(data)
@@ -311,6 +325,7 @@ provide('getRole', getRole)
 .tags {
   display: flex;
   justify-content: center;
+  flex-wrap: wrap;
   grid-gap: 0.5rem;
   gap: 0.5rem;
 }

+ 63 - 0
src/views/user/user/parts/school.vue

@@ -0,0 +1,63 @@
+<template>
+  <div class="index">
+    <el-form ref="ruleFormRef" :model="form" label-width="90px" class="form" label-position="left" >
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="院校名称" prop="name">
+            <el-input clearable v-model="form.name" placeholder="请输入院校名称" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="负责人姓名" prop="person">
+            <el-input clearable v-model="form.person" placeholder="请输入负责人姓名" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="负责人电话" prop="person_phone">
+            <el-input clearable v-model="form.person_phone" placeholder="请输入负责人电话" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否公开" prop="is_show">
+            <el-radio-group v-model="form.is_show">
+              <el-radio v-for="i in isUseList" :key="i.id" :label="i.value">{{ i.label }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-col :span="24">
+        <el-form-item label="地址" prop="address">
+          <el-input v-model="form.address" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" placeholder="请输入地址" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="24">
+        <el-form-item label="简介" prop="brief">
+          <el-input v-model="form.brief" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" placeholder="请输入简介" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="24">
+        <el-form-item label="审核状态" prop="status">
+          <el-select clearable v-model="form.status" placeholder="请选择">
+            <el-option v-for="(item, index) in statusList" :key="index" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+      </el-col>
+      <el-row justify="center" style="text-align: center">
+        <el-col :span="6">
+          <el-button @click="onSubmit" type="primary">保存</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+<script setup>
+// 表单
+const form = inject('form')
+// 字典表
+const isUseList = inject('isUseList')
+const statusList = inject('statusList')
+const onSubmit = inject('onSubmit')
+</script>
+<style scoped lang="scss"></style>

+ 3 - 2
src/views/user/user/parts/user.vue

@@ -7,7 +7,7 @@
         </div>
       </template>
       <template #industry>
-        <el-option v-for="i in sectorList" :key="i.id" :label="i.title" :value="i.title"></el-option>
+        <el-checkbox v-for="i in sectorList" :key="i.id" :label="i.title" :value="i.title" />
       </template>
       <template #gender>
         <el-option v-for="i in genderList" :key="i.id" :label="i.label" :value="i.value"></el-option>
@@ -24,7 +24,7 @@ const formFields = ref([
   { label: t('pages.user.openid'), model: 'openid', options: { readonly: true } },
   { label: t('pages.user.account'), model: 'account', options: { readonly: true } },
   { label: t('pages.user.nick_name'), model: 'nick_name', options: { readonly: true } },
-  { label: t('pages.user.industry'), model: 'industry', type: 'select' },
+  { label: t('pages.user.industry'), model: 'industry', type: 'checkbox' },
   { label: t('pages.user.gender'), model: 'gender', type: 'select' },
   { label: t('pages.user.email'), model: 'email', options: { readonly: true } },
   { label: t('pages.user.phone'), model: 'phone', options: { readonly: true } },
@@ -39,6 +39,7 @@ const onSubmit = inject('onSubmit')
 .tags {
   display: flex;
   justify-content: center;
+  flex-wrap: wrap;
   grid-gap: 0.5rem;
   gap: 0.5rem;
 }