demand.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <div class="demand">
  3. <el-col :span="24" class="one" v-if="type == '0'">
  4. <el-col :span="24" class="one_1">
  5. <el-button type="primary" @click="toCommon('1')">发布需求</el-button>
  6. </el-col>
  7. <el-col :span="24" class="one_2">
  8. <List></List>
  9. </el-col>
  10. </el-col>
  11. <el-col :span="24" class="two" v-else>
  12. <el-col :span="24" class="two_1">
  13. <el-button type="primary" @click="toCommon('0')">返回</el-button>
  14. </el-col>
  15. <el-col :span="24" class="two_2">
  16. <el-form
  17. label-position="top"
  18. ref="ruleFormRef"
  19. :model="form"
  20. :rules="rules"
  21. label-width="80px"
  22. class="form"
  23. >
  24. <el-form-item label="需求名称" prop="name">
  25. <el-input v-model="form.name" placeholder="请输入需求名称"> </el-input>
  26. </el-form-item>
  27. <el-form-item label="类型" prop="type">
  28. <el-select v-model="form.type" clearable placeholder="请选择类型">
  29. <el-option
  30. v-for="(item, index) in typeList"
  31. :key="index"
  32. :label="item.label"
  33. :value="item.value"
  34. />
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item label="行业领域" prop="field">
  38. <el-select v-model="form.field" clearable placeholder="请选择行业领域">
  39. <el-option
  40. v-for="(item, index) in fieldList"
  41. :key="index"
  42. :label="item.label"
  43. :value="item.value"
  44. />
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item label="需求紧急度" prop="urgent">
  48. <el-select v-model="form.urgent" clearable placeholder="请选择需求紧急度">
  49. <el-option
  50. v-for="(item, index) in urgentList"
  51. :key="index"
  52. :label="item.label"
  53. :value="item.value"
  54. />
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item label="合作方式" prop="method">
  58. <el-select v-model="form.method" clearable placeholder="请选择合作方式">
  59. <el-option
  60. v-for="(item, index) in methodList"
  61. :key="index"
  62. :label="item.label"
  63. :value="item.value"
  64. />
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item label="价格(万元)" prop="money">
  68. <el-input v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
  69. </el-form-item>
  70. <el-form-item label="需求地区" prop="area">
  71. <el-cascader
  72. v-model="form.area"
  73. :props="{ value: 'label', label: 'label' }"
  74. :options="cityList"
  75. style="width: 100%"
  76. />
  77. </el-form-item>
  78. <el-form-item label="有效期" prop="time">
  79. <el-date-picker
  80. v-model="form.time"
  81. type="daterange"
  82. format="YYYY-MM-DD"
  83. value-format="YYYY-MM-DD"
  84. range-separator="至"
  85. start-placeholder="开始时间"
  86. end-placeholder="结束时间"
  87. />
  88. </el-form-item>
  89. <el-form-item label="是否启用" prop="is_use">
  90. <el-radio-group v-model="form.is_use">
  91. <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
  92. item.label
  93. }}</el-radio>
  94. </el-radio-group>
  95. </el-form-item>
  96. <el-form-item label="简介" prop="brief">
  97. <el-input
  98. v-model="form.brief"
  99. :autosize="{ minRows: 2, maxRows: 8 }"
  100. type="textarea"
  101. placeholder="请输入简介"
  102. />
  103. </el-form-item>
  104. <el-form-item>
  105. <el-col :span="24" class="button">
  106. <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
  107. </el-col>
  108. </el-form-item>
  109. </el-form>
  110. </el-col>
  111. </el-col>
  112. </div>
  113. </template>
  114. <script setup>
  115. const $checkRes = inject('$checkRes')
  116. import { getCity } from '@/utils/city'
  117. import { DictDataStore } from '@/store/api/system/dictData'
  118. const dictDataStore = DictDataStore()
  119. // 组件
  120. import List from './parts/list.vue'
  121. const form = inject('form')
  122. const type = inject('type')
  123. const ruleFormRef = inject('ruleFormRef')
  124. const toCommon = inject('toCommon')
  125. const submitForm = inject('submitForm')
  126. // 字典表
  127. const isUseList = ref([])
  128. const statusList = ref([])
  129. const methodList = ref([])
  130. const urgentList = ref([])
  131. const fieldList = ref([])
  132. const cityList = ref([])
  133. const demandList = ref([])
  134. const typeList = ref([
  135. { value: '0', label: '供给' },
  136. { value: '1', label: '需求' }
  137. ])
  138. const rules = reactive({
  139. name: [{ required: true, message: '请输入需求名称', trigger: 'blur' }],
  140. field: [{ required: true, message: '请选择行业领域', trigger: 'change' }],
  141. urgent: [{ required: true, message: '请选择需求紧急度', trigger: 'change' }],
  142. method: [{ required: true, message: '请选择合作方式', trigger: 'change' }],
  143. money: [{ required: true, message: '请输入价格', trigger: 'blur' }],
  144. area: [{ required: true, message: '请选择需求地区', trigger: 'change' }],
  145. time: [{ required: true, message: '请选择起始时间', trigger: 'change' }],
  146. is_use: [{ required: true, message: '请选择是否使用', trigger: 'change' }],
  147. brief: [{ required: true, message: '请输入简介', trigger: 'blur' }]
  148. })
  149. // 请求
  150. onMounted(async () => {
  151. getCity().then((response) => {
  152. cityList.value = response.address
  153. })
  154. await searchOther()
  155. })
  156. const searchOther = async () => {
  157. let result
  158. // 是否使用
  159. result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
  160. if ($checkRes(result)) isUseList.value = result.data
  161. // 状态
  162. result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
  163. if ($checkRes(result)) statusList.value = result.data
  164. // 合作方式
  165. result = await dictDataStore.query({ code: 'method', is_use: '0' })
  166. if ($checkRes(result)) methodList.value = result.data
  167. // 需求紧急度
  168. result = await dictDataStore.query({ code: 'urgent', is_use: '0' })
  169. if ($checkRes(result)) urgentList.value = result.data
  170. // 技术领域
  171. result = await dictDataStore.query({ code: 'field', is_use: '0' })
  172. if ($checkRes(result)) fieldList.value = result.data
  173. // 需求状态
  174. result = await dictDataStore.query({ code: 'demandStatus', is_use: '0' })
  175. if ($checkRes(result)) demandList.value = result.data
  176. }
  177. </script>
  178. <style scoped lang="scss">
  179. .one {
  180. .one_1 {
  181. margin: 0 10px 10px 10px;
  182. text-align: right;
  183. }
  184. }
  185. .two {
  186. background-color: #fff;
  187. padding: 20px;
  188. border-radius: 10px;
  189. .two_1 {
  190. text-align: right;
  191. }
  192. .two_2 {
  193. .button {
  194. text-align: center;
  195. }
  196. }
  197. }
  198. </style>