소스 검색

修改报名管理

zs 1 년 전
부모
커밋
b44c20831f
3개의 변경된 파일118개의 추가작업 그리고 16개의 파일을 삭제
  1. 40 0
      src/store/api/platform/sign.js
  2. 30 10
      src/views/innovation/detail.vue
  3. 48 6
      src/views/innovation/parts/index.vue

+ 40 - 0
src/store/api/platform/sign.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/sign'
+const axios = new AxiosWrapper()
+
+export const SignStore = defineStore('sign', () => {
+  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
+  }
+})

+ 30 - 10
src/views/innovation/detail.vue

@@ -139,9 +139,14 @@ const $checkRes = inject('$checkRes')
 // 组件
 import dataForm from './parts/index.vue'
 // 接口
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = computed(() => userStore.user)
 import { DictDataStore } from '@/store/api/system/dictData'
 import { MatchStore } from '@/store/api/platform/match'
+import { SignStore } from '@/store/api/platform/sign'
 const store = MatchStore()
+const signStore = SignStore()
 const dictDataStore = DictDataStore()
 // 图片引入
 import news from '@/assets/news.png'
@@ -157,6 +162,7 @@ const activeName = ref('first')
 const statusList = ref([])
 const typeList = ref([])
 const formList = ref([])
+const cardTypeList = ref([])
 const menuList = ref([
   { title: '大赛背景', label: 'rules1' },
   { title: '大赛主题和目标', label: 'rules2' },
@@ -172,17 +178,24 @@ const menuList = ref([
   { title: '赛事交流', label: 'rules12' }
 ])
 // 弹框
+const ruleFormRef = ref()
 const form = ref({})
+const validatePhoneNumber = (rule, value, callback) => {
+  const reg = /^1[3-9]\d{9}$/
+  if (!value) {
+    return callback(new Error('手机号不能为空'))
+  }
+  if (!reg.test(value)) {
+    return callback(new Error('请输入正确的手机号'))
+  }
+  callback()
+}
 const rules = reactive({
-  name: [{ required: true, message: '请输入需求名称', trigger: 'blur' }],
-  field: [{ required: true, message: '请选择行业领域', trigger: 'change' }],
-  urgent: [{ required: true, message: '请选择需求紧急度', trigger: 'change' }],
-  method: [{ required: true, message: '请选择合作方式', trigger: 'change' }],
-  money: [{ required: true, message: '请输入价格', trigger: 'blur' }],
-  area: [{ required: true, message: '请选择需求地区', trigger: 'change' }],
-  time: [{ required: true, message: '请选择起始时间', trigger: 'change' }],
-  is_use: [{ required: true, message: '请选择是否使用', trigger: 'change' }],
-  brief: [{ required: true, message: '请输入简介', trigger: 'blur' }]
+  name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
+  phone: [{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],
+  cardType: [{ required: true, message: '请选择证件类型', trigger: 'change' }],
+  card: [{ required: true, message: '请选择证件号码', trigger: 'change' }],
+  remark: [{ required: true, message: '请输入备注', trigger: 'blur' }]
 })
 const dialog = ref(false)
 // 列表
@@ -206,6 +219,9 @@ const searchOther = async () => {
   // 赛事状态
   result = await dictDataStore.query({ code: 'matchStatus', is_use: '0' })
   if ($checkRes(result)) statusList.value = result.data
+  // 证件类型
+  result = await dictDataStore.query({ code: 'cardType', is_use: '0' })
+  if ($checkRes(result)) cardTypeList.value = result.data
 }
 const searchMatch = async () => {
   const info = {
@@ -263,7 +279,9 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      console.log(data)
+      const other = { match: info.value._id, user: user.value._id }
+      let res = await signStore.create({ ...data, ...other })
+      if ($checkRes(res, true)) toClose()
     } else {
       console.log('error submit!', fields)
     }
@@ -272,6 +290,8 @@ const submitForm = async (formEl) => {
 // provide
 provide('form', form)
 provide('rules', rules)
+provide('ruleFormRef', ruleFormRef)
+provide('cardTypeList', cardTypeList)
 provide('submitForm', submitForm)
 </script>
 <style scoped lang="scss">

+ 48 - 6
src/views/innovation/parts/index.vue

@@ -11,15 +11,55 @@
             label-width="80px"
             class="form"
           >
-            <el-form-item label="姓名" prop="name">
-              <el-input v-model="form.name" placeholder="请输入姓名"> </el-input>
-            </el-form-item>
-            <el-form-item label="简介" prop="brief">
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="姓名" prop="name">
+                  <el-input v-model="form.name" placeholder="请输入姓名"> </el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="电话号" prop="phone">
+                  <el-input v-model="form.phone" placeholder="请输入姓名"> </el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="证件类型" prop="cardType">
+                  <el-select clearable v-model="form.cardType" placeholder="请选择证件类型">
+                    <el-option
+                      v-for="(item, index) in cardTypeList"
+                      :key="index"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="证件号码" prop="card">
+                  <el-input v-model="form.card" placeholder="请输入证件号码"> </el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="微信/QQ" prop="communication">
+                  <el-input v-model="form.communication" placeholder="请输入微信/QQ"> </el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="电子邮箱" prop="email">
+                  <el-input v-model="form.email" placeholder="请输入电子邮箱"> </el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-form-item label="备注" prop="brief">
               <el-input
-                v-model="form.brief"
+                v-model="form.remark"
                 :autosize="{ minRows: 2, maxRows: 8 }"
                 type="textarea"
-                placeholder="请输入简介"
+                placeholder="请输入备注"
               />
             </el-form-item>
             <el-form-item>
@@ -35,8 +75,10 @@
 </template>
 
 <script setup>
+const ruleFormRef = inject('ruleFormRef')
 const form = inject('form')
 const rules = inject('rules')
+const cardTypeList = inject('cardTypeList')
 const submitForm = inject('submitForm')
 </script>
 <style scoped lang="scss">