zs 1 년 전
부모
커밋
7c947b9c8e
8개의 변경된 파일482개의 추가작업 그리고 121개의 파일을 삭제
  1. 11 0
      package-lock.json
  2. 1 0
      package.json
  3. 1 0
      src/main.js
  4. 17 13
      src/views/release/index.vue
  5. 113 27
      src/views/release/parts/achievement.vue
  6. 113 27
      src/views/release/parts/demand.vue
  7. 113 27
      src/views/release/parts/match.vue
  8. 113 27
      src/views/release/parts/project.vue

+ 11 - 0
package-lock.json

@@ -16,6 +16,7 @@
         "ant-design-vue": "^4.0.8",
         "axios": "^1.6.7",
         "dayjs": "^1.11.10",
+        "default-passive-events": "^2.0.0",
         "element-plus": "^2.5.6",
         "lodash-es": "^4.17.21",
         "moment": "^2.30.1",
@@ -2326,6 +2327,11 @@
         "node": ">=18"
       }
     },
+    "node_modules/default-passive-events": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/default-passive-events/-/default-passive-events-2.0.0.tgz",
+      "integrity": "sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ=="
+    },
     "node_modules/define-lazy-prop": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
@@ -8251,6 +8257,11 @@
       "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
       "dev": true
     },
+    "default-passive-events": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/default-passive-events/-/default-passive-events-2.0.0.tgz",
+      "integrity": "sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ=="
+    },
     "define-lazy-prop": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",

+ 1 - 0
package.json

@@ -19,6 +19,7 @@
     "ant-design-vue": "^4.0.8",
     "axios": "^1.6.7",
     "dayjs": "^1.11.10",
+    "default-passive-events": "^2.0.0",
     "element-plus": "^2.5.6",
     "lodash-es": "^4.17.21",
     "moment": "^2.30.1",

+ 1 - 0
src/main.js

@@ -20,6 +20,7 @@ import vue3SeamlessScroll from 'vue3-seamless-scroll'
 // Antd
 import Antd from 'ant-design-vue'
 import 'ant-design-vue/dist/reset.css'
+import 'default-passive-events'
 
 const app = createApp(App)
 globalComponents(app)

+ 17 - 13
src/views/release/index.vue

@@ -109,18 +109,7 @@ const search = async (query = { skip: 0, limit }) => {
     total.value = res.total
   }
 }
-// 保存
-const submitForm = async (formEl) => {
-  if (!formEl) return
-  await formEl.validate(async (valid, fields) => {
-    if (valid) {
-      const data = cloneDeep(form.value)
-      console.log(data)
-    } else {
-      console.log('error submit!', fields)
-    }
-  })
-}
+
 const searchOther = async () => {
   let result
   // 技术领域
@@ -148,6 +137,7 @@ const getTime = (data) => {
   else return '暂无'
 }
 const toCommon = (data) => {
+  form.value = {}
   type.value = data
 }
 // 查看
@@ -156,7 +146,20 @@ const toView = (item) => {
 }
 // 修改
 const toEdit = (item) => {
-  console.log(item)
+  form.value = item
+  type.value = '1'
+}
+// 保存
+const submitForm = async (formEl) => {
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      const data = cloneDeep(form.value)
+      console.log(data)
+    } else {
+      console.log('error submit!', fields)
+    }
+  })
 }
 // 分页
 const changePage = (page = currentPage.value) => {
@@ -171,6 +174,7 @@ watch(
   route,
   (newVal) => {
     if (newVal) {
+      type.value = '0'
       list.value = []
       searchField()
     }

+ 113 - 27
src/views/release/parts/achievement.vue

@@ -21,56 +21,142 @@
           label-width="80px"
           class="form"
         >
-          <el-form-item label="账号" prop="account">
-            <el-input v-model="form.account" placeholder="请输入账号"> </el-input>
+          <el-form-item label="需求名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入需求名称"> </el-input>
           </el-form-item>
-          <el-form-item label="昵称" prop="nick_name">
-            <el-input v-model="form.nick_name" placeholder="请输入昵称"> </el-input>
+          <el-form-item label="行业领域" prop="field">
+            <el-select v-model="form.field" width="100%" placeholder="请选择行业领域">
+              <el-option
+                v-for="(item, index) in fieldList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="需求紧急度" prop="urgent">
+            <el-select v-model="form.urgent" width="100%" placeholder="请选择需求紧急度">
+              <el-option
+                v-for="(item, index) in urgentList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
           </el-form-item>
-          <el-form-item label="性别" prop="gender">
-            <el-select v-model="form.gender" width="100%" placeholder="请选择性别">
+          <el-form-item label="合作方式" prop="method">
+            <el-select v-model="form.method" width="100%" placeholder="请选择合作方式">
               <el-option
-                v-for="(item, index) in genderList"
+                v-for="(item, index) in methodList"
                 :key="index"
                 :label="item.label"
                 :value="item.value"
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="手机号" prop="phone">
-            <el-input v-model="form.phone" placeholder="请输入手机号"> </el-input>
+          <el-form-item label="价格(万元)" prop="money">
+            <el-input v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
+          </el-form-item>
+          <el-form-item label="需求地区" prop="area">
+            <el-cascader
+              v-model="form.area"
+              :props="{ value: 'label', label: 'label' }"
+              :options="cityList"
+              style="width: 100%"
+            />
+          </el-form-item>
+          <el-form-item label="有效期" prop="time">
+            <el-date-picker
+              v-model="form.time"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+            />
+          </el-form-item>
+          <el-form-item label="是否启用" prop="is_use">
+            <el-radio-group v-model="form.is_use">
+              <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
+                item.label
+              }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="简介" prop="brief">
+            <el-input
+              v-model="form.brief"
+              :autosize="{ minRows: 2, maxRows: 4 }"
+              type="textarea"
+              placeholder="请输入简介"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-col :span="24" class="button">
+              <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
+            </el-col>
           </el-form-item>
         </el-form>
-        <el-col :span="24" class="button">
-          <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
-        </el-col>
       </el-col>
     </el-col>
   </div>
 </template>
 <script setup>
+const $checkRes = inject('$checkRes')
+import { getCity } from '@/utils/city'
+import { DictDataStore } from '@/store/api/system/dictData'
+const dictDataStore = DictDataStore()
 // 组件
 import List from './parts/list.vue'
 const form = inject('form')
 const type = inject('type')
-const submitForm = inject('submitForm')
 const toCommon = inject('toCommon')
-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 submitForm = inject('submitForm')
+// 字典表
+const isUseList = ref([])
+const statusList = ref([])
+const methodList = ref([])
+const urgentList = ref([])
+const fieldList = ref([])
+const cityList = ref([])
+const demandList = ref([])
 const rules = reactive({
-  nick_name: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
-  gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
-  phone: [{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],
-  account: [{ required: true, message: '请输入账号', trigger: 'blur' }]
+  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' }]
+})
+// 请求
+onMounted(async () => {
+  getCity().then((response) => {
+    cityList.value = response.address
+  })
+  await searchOther()
 })
+const searchOther = async () => {
+  let result
+  // 是否使用
+  result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
+  if ($checkRes(result)) isUseList.value = result.data
+  // 状态
+  result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
+  if ($checkRes(result)) statusList.value = result.data
+  // 合作方式
+  result = await dictDataStore.query({ code: 'method', is_use: '0' })
+  if ($checkRes(result)) methodList.value = result.data
+  // 需求紧急度
+  result = await dictDataStore.query({ code: 'urgent', is_use: '0' })
+  if ($checkRes(result)) urgentList.value = result.data
+  // 技术领域
+  result = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if ($checkRes(result)) fieldList.value = result.data
+  // 需求状态
+  result = await dictDataStore.query({ code: 'demandStatus', is_use: '0' })
+  if ($checkRes(result)) demandList.value = result.data
+}
 </script>
 <style scoped lang="scss">
 .one {

+ 113 - 27
src/views/release/parts/demand.vue

@@ -21,56 +21,142 @@
           label-width="80px"
           class="form"
         >
-          <el-form-item label="账号" prop="account">
-            <el-input v-model="form.account" placeholder="请输入账号"> </el-input>
+          <el-form-item label="需求名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入需求名称"> </el-input>
           </el-form-item>
-          <el-form-item label="昵称" prop="nick_name">
-            <el-input v-model="form.nick_name" placeholder="请输入昵称"> </el-input>
+          <el-form-item label="行业领域" prop="field">
+            <el-select v-model="form.field" width="100%" placeholder="请选择行业领域">
+              <el-option
+                v-for="(item, index) in fieldList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="需求紧急度" prop="urgent">
+            <el-select v-model="form.urgent" width="100%" placeholder="请选择需求紧急度">
+              <el-option
+                v-for="(item, index) in urgentList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
           </el-form-item>
-          <el-form-item label="性别" prop="gender">
-            <el-select v-model="form.gender" width="100%" placeholder="请选择性别">
+          <el-form-item label="合作方式" prop="method">
+            <el-select v-model="form.method" width="100%" placeholder="请选择合作方式">
               <el-option
-                v-for="(item, index) in genderList"
+                v-for="(item, index) in methodList"
                 :key="index"
                 :label="item.label"
                 :value="item.value"
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="手机号" prop="phone">
-            <el-input v-model="form.phone" placeholder="请输入手机号"> </el-input>
+          <el-form-item label="价格(万元)" prop="money">
+            <el-input v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
+          </el-form-item>
+          <el-form-item label="需求地区" prop="area">
+            <el-cascader
+              v-model="form.area"
+              :props="{ value: 'label', label: 'label' }"
+              :options="cityList"
+              style="width: 100%"
+            />
+          </el-form-item>
+          <el-form-item label="有效期" prop="time">
+            <el-date-picker
+              v-model="form.time"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+            />
+          </el-form-item>
+          <el-form-item label="是否启用" prop="is_use">
+            <el-radio-group v-model="form.is_use">
+              <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
+                item.label
+              }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="简介" prop="brief">
+            <el-input
+              v-model="form.brief"
+              :autosize="{ minRows: 2, maxRows: 4 }"
+              type="textarea"
+              placeholder="请输入简介"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-col :span="24" class="button">
+              <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
+            </el-col>
           </el-form-item>
         </el-form>
-        <el-col :span="24" class="button">
-          <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
-        </el-col>
       </el-col>
     </el-col>
   </div>
 </template>
 <script setup>
+const $checkRes = inject('$checkRes')
+import { getCity } from '@/utils/city'
+import { DictDataStore } from '@/store/api/system/dictData'
+const dictDataStore = DictDataStore()
 // 组件
 import List from './parts/list.vue'
 const form = inject('form')
 const type = inject('type')
-const submitForm = inject('submitForm')
 const toCommon = inject('toCommon')
-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 submitForm = inject('submitForm')
+// 字典表
+const isUseList = ref([])
+const statusList = ref([])
+const methodList = ref([])
+const urgentList = ref([])
+const fieldList = ref([])
+const cityList = ref([])
+const demandList = ref([])
 const rules = reactive({
-  nick_name: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
-  gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
-  phone: [{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],
-  account: [{ required: true, message: '请输入账号', trigger: 'blur' }]
+  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' }]
+})
+// 请求
+onMounted(async () => {
+  getCity().then((response) => {
+    cityList.value = response.address
+  })
+  await searchOther()
 })
+const searchOther = async () => {
+  let result
+  // 是否使用
+  result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
+  if ($checkRes(result)) isUseList.value = result.data
+  // 状态
+  result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
+  if ($checkRes(result)) statusList.value = result.data
+  // 合作方式
+  result = await dictDataStore.query({ code: 'method', is_use: '0' })
+  if ($checkRes(result)) methodList.value = result.data
+  // 需求紧急度
+  result = await dictDataStore.query({ code: 'urgent', is_use: '0' })
+  if ($checkRes(result)) urgentList.value = result.data
+  // 技术领域
+  result = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if ($checkRes(result)) fieldList.value = result.data
+  // 需求状态
+  result = await dictDataStore.query({ code: 'demandStatus', is_use: '0' })
+  if ($checkRes(result)) demandList.value = result.data
+}
 </script>
 <style scoped lang="scss">
 .one {

+ 113 - 27
src/views/release/parts/match.vue

@@ -21,56 +21,142 @@
           label-width="80px"
           class="form"
         >
-          <el-form-item label="账号" prop="account">
-            <el-input v-model="form.account" placeholder="请输入账号"> </el-input>
+          <el-form-item label="需求名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入需求名称"> </el-input>
           </el-form-item>
-          <el-form-item label="昵称" prop="nick_name">
-            <el-input v-model="form.nick_name" placeholder="请输入昵称"> </el-input>
+          <el-form-item label="行业领域" prop="field">
+            <el-select v-model="form.field" width="100%" placeholder="请选择行业领域">
+              <el-option
+                v-for="(item, index) in fieldList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="需求紧急度" prop="urgent">
+            <el-select v-model="form.urgent" width="100%" placeholder="请选择需求紧急度">
+              <el-option
+                v-for="(item, index) in urgentList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
           </el-form-item>
-          <el-form-item label="性别" prop="gender">
-            <el-select v-model="form.gender" width="100%" placeholder="请选择性别">
+          <el-form-item label="合作方式" prop="method">
+            <el-select v-model="form.method" width="100%" placeholder="请选择合作方式">
               <el-option
-                v-for="(item, index) in genderList"
+                v-for="(item, index) in methodList"
                 :key="index"
                 :label="item.label"
                 :value="item.value"
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="手机号" prop="phone">
-            <el-input v-model="form.phone" placeholder="请输入手机号"> </el-input>
+          <el-form-item label="价格(万元)" prop="money">
+            <el-input v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
+          </el-form-item>
+          <el-form-item label="需求地区" prop="area">
+            <el-cascader
+              v-model="form.area"
+              :props="{ value: 'label', label: 'label' }"
+              :options="cityList"
+              style="width: 100%"
+            />
+          </el-form-item>
+          <el-form-item label="有效期" prop="time">
+            <el-date-picker
+              v-model="form.time"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+            />
+          </el-form-item>
+          <el-form-item label="是否启用" prop="is_use">
+            <el-radio-group v-model="form.is_use">
+              <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
+                item.label
+              }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="简介" prop="brief">
+            <el-input
+              v-model="form.brief"
+              :autosize="{ minRows: 2, maxRows: 4 }"
+              type="textarea"
+              placeholder="请输入简介"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-col :span="24" class="button">
+              <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
+            </el-col>
           </el-form-item>
         </el-form>
-        <el-col :span="24" class="button">
-          <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
-        </el-col>
       </el-col>
     </el-col>
   </div>
 </template>
 <script setup>
+const $checkRes = inject('$checkRes')
+import { getCity } from '@/utils/city'
+import { DictDataStore } from '@/store/api/system/dictData'
+const dictDataStore = DictDataStore()
 // 组件
 import List from './parts/list.vue'
 const form = inject('form')
 const type = inject('type')
-const submitForm = inject('submitForm')
 const toCommon = inject('toCommon')
-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 submitForm = inject('submitForm')
+// 字典表
+const isUseList = ref([])
+const statusList = ref([])
+const methodList = ref([])
+const urgentList = ref([])
+const fieldList = ref([])
+const cityList = ref([])
+const demandList = ref([])
 const rules = reactive({
-  nick_name: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
-  gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
-  phone: [{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],
-  account: [{ required: true, message: '请输入账号', trigger: 'blur' }]
+  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' }]
+})
+// 请求
+onMounted(async () => {
+  getCity().then((response) => {
+    cityList.value = response.address
+  })
+  await searchOther()
 })
+const searchOther = async () => {
+  let result
+  // 是否使用
+  result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
+  if ($checkRes(result)) isUseList.value = result.data
+  // 状态
+  result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
+  if ($checkRes(result)) statusList.value = result.data
+  // 合作方式
+  result = await dictDataStore.query({ code: 'method', is_use: '0' })
+  if ($checkRes(result)) methodList.value = result.data
+  // 需求紧急度
+  result = await dictDataStore.query({ code: 'urgent', is_use: '0' })
+  if ($checkRes(result)) urgentList.value = result.data
+  // 技术领域
+  result = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if ($checkRes(result)) fieldList.value = result.data
+  // 需求状态
+  result = await dictDataStore.query({ code: 'demandStatus', is_use: '0' })
+  if ($checkRes(result)) demandList.value = result.data
+}
 </script>
 <style scoped lang="scss">
 .one {

+ 113 - 27
src/views/release/parts/project.vue

@@ -21,56 +21,142 @@
           label-width="80px"
           class="form"
         >
-          <el-form-item label="账号" prop="account">
-            <el-input v-model="form.account" placeholder="请输入账号"> </el-input>
+          <el-form-item label="需求名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入需求名称"> </el-input>
           </el-form-item>
-          <el-form-item label="昵称" prop="nick_name">
-            <el-input v-model="form.nick_name" placeholder="请输入昵称"> </el-input>
+          <el-form-item label="行业领域" prop="field">
+            <el-select v-model="form.field" width="100%" placeholder="请选择行业领域">
+              <el-option
+                v-for="(item, index) in fieldList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="需求紧急度" prop="urgent">
+            <el-select v-model="form.urgent" width="100%" placeholder="请选择需求紧急度">
+              <el-option
+                v-for="(item, index) in urgentList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
           </el-form-item>
-          <el-form-item label="性别" prop="gender">
-            <el-select v-model="form.gender" width="100%" placeholder="请选择性别">
+          <el-form-item label="合作方式" prop="method">
+            <el-select v-model="form.method" width="100%" placeholder="请选择合作方式">
               <el-option
-                v-for="(item, index) in genderList"
+                v-for="(item, index) in methodList"
                 :key="index"
                 :label="item.label"
                 :value="item.value"
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="手机号" prop="phone">
-            <el-input v-model="form.phone" placeholder="请输入手机号"> </el-input>
+          <el-form-item label="价格(万元)" prop="money">
+            <el-input v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
+          </el-form-item>
+          <el-form-item label="需求地区" prop="area">
+            <el-cascader
+              v-model="form.area"
+              :props="{ value: 'label', label: 'label' }"
+              :options="cityList"
+              style="width: 100%"
+            />
+          </el-form-item>
+          <el-form-item label="有效期" prop="time">
+            <el-date-picker
+              v-model="form.time"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+            />
+          </el-form-item>
+          <el-form-item label="是否启用" prop="is_use">
+            <el-radio-group v-model="form.is_use">
+              <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
+                item.label
+              }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="简介" prop="brief">
+            <el-input
+              v-model="form.brief"
+              :autosize="{ minRows: 2, maxRows: 4 }"
+              type="textarea"
+              placeholder="请输入简介"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-col :span="24" class="button">
+              <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
+            </el-col>
           </el-form-item>
         </el-form>
-        <el-col :span="24" class="button">
-          <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
-        </el-col>
       </el-col>
     </el-col>
   </div>
 </template>
 <script setup>
+const $checkRes = inject('$checkRes')
+import { getCity } from '@/utils/city'
+import { DictDataStore } from '@/store/api/system/dictData'
+const dictDataStore = DictDataStore()
 // 组件
 import List from './parts/list.vue'
 const form = inject('form')
 const type = inject('type')
-const submitForm = inject('submitForm')
 const toCommon = inject('toCommon')
-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 submitForm = inject('submitForm')
+// 字典表
+const isUseList = ref([])
+const statusList = ref([])
+const methodList = ref([])
+const urgentList = ref([])
+const fieldList = ref([])
+const cityList = ref([])
+const demandList = ref([])
 const rules = reactive({
-  nick_name: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
-  gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
-  phone: [{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],
-  account: [{ required: true, message: '请输入账号', trigger: 'blur' }]
+  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' }]
+})
+// 请求
+onMounted(async () => {
+  getCity().then((response) => {
+    cityList.value = response.address
+  })
+  await searchOther()
 })
+const searchOther = async () => {
+  let result
+  // 是否使用
+  result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
+  if ($checkRes(result)) isUseList.value = result.data
+  // 状态
+  result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
+  if ($checkRes(result)) statusList.value = result.data
+  // 合作方式
+  result = await dictDataStore.query({ code: 'method', is_use: '0' })
+  if ($checkRes(result)) methodList.value = result.data
+  // 需求紧急度
+  result = await dictDataStore.query({ code: 'urgent', is_use: '0' })
+  if ($checkRes(result)) urgentList.value = result.data
+  // 技术领域
+  result = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if ($checkRes(result)) fieldList.value = result.data
+  // 需求状态
+  result = await dictDataStore.query({ code: 'demandStatus', is_use: '0' })
+  if ($checkRes(result)) demandList.value = result.data
+}
 </script>
 <style scoped lang="scss">
 .one {