achievement.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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="AchieveRules"
  19. :model="form"
  20. :rules="rules"
  21. label-width="80px"
  22. class="form"
  23. >
  24. <el-form-item label="专利号" prop="patent">
  25. <el-input clearable v-model="form.patent" placeholder="请输入专利号"> </el-input>
  26. </el-form-item>
  27. <el-form-item label="成果名称" prop="name">
  28. <el-input clearable v-model="form.name" placeholder="请输入成果名称"> </el-input>
  29. </el-form-item>
  30. <el-form-item label="行业领域" prop="field">
  31. <el-select v-model="form.field" clearable placeholder="请选择行业领域">
  32. <el-option
  33. v-for="(item, index) in fieldList"
  34. :key="index"
  35. :label="item.label"
  36. :value="item.value"
  37. />
  38. </el-select>
  39. </el-form-item>
  40. <el-form-item label="属性" prop="attribute">
  41. <el-select v-model="form.attribute" clearable placeholder="请选择属性">
  42. <el-option
  43. v-for="(item, index) in attributeList"
  44. :key="index"
  45. :label="item.label"
  46. :value="item.value"
  47. />
  48. </el-select>
  49. </el-form-item>
  50. <el-form-item label="成熟度" prop="mature">
  51. <el-select v-model="form.mature" clearable placeholder="请选择成熟度">
  52. <el-option
  53. v-for="(item, index) in matureList"
  54. :key="index"
  55. :label="item.label"
  56. :value="item.value"
  57. />
  58. </el-select>
  59. </el-form-item>
  60. <el-form-item label="出让方式" prop="sell">
  61. <el-select v-model="form.sell" clearable placeholder="请选择出让方式">
  62. <el-option
  63. v-for="(item, index) in sellList"
  64. :key="index"
  65. :label="item.label"
  66. :value="item.value"
  67. />
  68. </el-select>
  69. </el-form-item>
  70. <el-form-item label="技术分类" prop="technology">
  71. <el-select v-model="form.technology" clearable placeholder="请选择技术分类">
  72. <el-option
  73. v-for="(item, index) in technologyList"
  74. :key="index"
  75. :label="item.label"
  76. :value="item.value"
  77. />
  78. </el-select>
  79. </el-form-item>
  80. <el-form-item label="价格(万元)" prop="money">
  81. <el-input clearable v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
  82. </el-form-item>
  83. <el-form-item label="成果地区" prop="area">
  84. <el-cascader
  85. v-model="form.area"
  86. :props="{ value: 'label', label: 'label' }"
  87. :options="cityList"
  88. style="width: 100%"
  89. />
  90. </el-form-item>
  91. <el-form-item label="发布时间" prop="time">
  92. <el-date-picker
  93. v-model="form.time"
  94. format="YYYY-MM-DD"
  95. value-format="YYYY-MM-DD"
  96. placeholder="请选择发布时间"
  97. type="date"
  98. style="width: 100%"
  99. />
  100. </el-form-item>
  101. <el-form-item label="是否启用" prop="is_use">
  102. <el-radio-group v-model="form.is_use">
  103. <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
  104. item.label
  105. }}</el-radio>
  106. </el-radio-group>
  107. </el-form-item>
  108. <el-form-item label="简介" prop="brief">
  109. <el-input
  110. v-model="form.brief"
  111. :autosize="{ minRows: 2, maxRows: 8 }"
  112. type="textarea"
  113. placeholder="请输入简介"
  114. />
  115. </el-form-item>
  116. <el-form-item>
  117. <el-col :span="24" class="button">
  118. <el-button type="primary" @click="submitForm(AchieveRules)">保存</el-button>
  119. </el-col>
  120. </el-form-item>
  121. </el-form>
  122. </el-col>
  123. </el-col>
  124. </div>
  125. </template>
  126. <script setup>
  127. const $checkRes = inject('$checkRes')
  128. import { getCity } from '@/utils/city'
  129. import { DictDataStore } from '@/store/api/system/dictData'
  130. const dictDataStore = DictDataStore()
  131. // 组件
  132. import List from './parts/list.vue'
  133. const form = inject('form')
  134. const type = inject('type')
  135. const AchieveRules = ref()
  136. const toCommon = inject('toCommon')
  137. const submitForm = inject('submitForm')
  138. // 字典表
  139. const isUseList = ref([])
  140. const statusList = ref([])
  141. const fieldList = ref([])
  142. const attributeList = ref([])
  143. const matureList = ref([])
  144. const sellList = ref([])
  145. const technologyList = ref([])
  146. const cityList = ref([])
  147. const achievementList = ref([])
  148. const rules = reactive({
  149. name: [{ required: true, message: '请输入成果名称', trigger: 'blur' }],
  150. patent: [{ required: true, message: '请输入专利号', trigger: 'blur' }],
  151. field: [{ required: true, message: '请选择行业领域', trigger: 'change' }],
  152. attribute: [{ required: true, message: '请选择属性', trigger: 'change' }],
  153. mature: [{ required: true, message: '请选择成熟度', trigger: 'change' }],
  154. sell: [{ required: true, message: '请选择出让方式', trigger: 'change' }],
  155. technology: [{ required: true, message: '请选择技术分类', trigger: 'change' }],
  156. money: [{ required: true, message: '请输入价格', trigger: 'blur' }],
  157. area: [{ required: true, message: '请选择成果地区', trigger: 'change' }],
  158. time: [{ required: true, message: '请选择发布时间', trigger: 'change' }],
  159. is_use: [{ required: true, message: '请选择是否使用', trigger: 'change' }],
  160. brief: [{ required: true, message: '请输入简介', trigger: 'blur' }]
  161. })
  162. // 请求
  163. onMounted(async () => {
  164. getCity().then((response) => {
  165. cityList.value = response.address
  166. })
  167. await searchOther()
  168. })
  169. const searchOther = async () => {
  170. let result
  171. // 是否使用
  172. result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
  173. if ($checkRes(result)) isUseList.value = result.data
  174. // 状态
  175. result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
  176. if ($checkRes(result)) statusList.value = result.data
  177. // 成熟度
  178. result = await dictDataStore.query({ code: 'mature', is_use: '0' })
  179. if ($checkRes(result)) matureList.value = result.data
  180. // 出让方式
  181. result = await dictDataStore.query({ code: 'sell', is_use: '0' })
  182. if ($checkRes(result)) sellList.value = result.data
  183. // 技术领域
  184. result = await dictDataStore.query({ code: 'field', is_use: '0' })
  185. if ($checkRes(result)) fieldList.value = result.data
  186. // 属性
  187. result = await dictDataStore.query({ code: 'attribute', is_use: '0' })
  188. if ($checkRes(result)) attributeList.value = result.data
  189. // 技术分类
  190. result = await dictDataStore.query({ code: 'technology', is_use: '0' })
  191. if ($checkRes(result)) technologyList.value = result.data
  192. // 成果状态
  193. result = await dictDataStore.query({ code: 'demandStatus', is_use: '0' })
  194. if ($checkRes(result)) achievementList.value = result.data
  195. }
  196. </script>
  197. <style scoped lang="scss">
  198. .one {
  199. .one_1 {
  200. margin: 0 10px 10px 10px;
  201. text-align: right;
  202. }
  203. }
  204. .two {
  205. background-color: #fff;
  206. padding: 20px;
  207. border-radius: 10px;
  208. .two_1 {
  209. text-align: right;
  210. }
  211. .two_2 {
  212. .button {
  213. text-align: center;
  214. }
  215. }
  216. }
  217. </style>