apply.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. <template>
  2. <div id="apply">
  3. <el-row>
  4. <el-col :span="24">
  5. <span v-if="type == '0'">
  6. <van-form>
  7. <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
  8. <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
  9. <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
  10. <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" />
  11. <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" />
  12. <van-field v-model="form.name" name="需求名称" label="需求名称" placeholder="需求名称" />
  13. <van-field name="radio" label="紧急程度">
  14. <template #input>
  15. <van-radio-group v-model="form.degreeurgency" direction="horizontal">
  16. <van-radio name="特急">特急</van-radio>
  17. <van-radio name="一般">一般</van-radio>
  18. <van-radio name="长期">长期</van-radio>
  19. </van-radio-group>
  20. </template>
  21. </van-field>
  22. <van-field readonly clickable name="picker" :value="form.field" label="所属领域" placeholder="点击选择" @click="fieldpic = true" />
  23. <van-popup v-model="fieldpic" position="bottom">
  24. <van-picker show-toolbar :columns="field" @confirm="fieldSubmit" @cancel="fieldpic = false" />
  25. </van-popup>
  26. <van-field readonly clickable name="picker" :value="form.cooperation" label="合作方式" placeholder="点击选择" @click="cooperationpic = true" />
  27. <van-popup v-model="cooperationpic" position="bottom">
  28. <van-picker show-toolbar :columns="cooperation" @confirm="cooperationSubmit" @cancel="cooperationpic = false" />
  29. </van-popup>
  30. <van-field v-model="form.budget" name="投资预算" label="投资预算" placeholder="投资预算" />
  31. <van-field v-model="form.requirementdesc" rows="1" autosize label="技术说明" type="textarea" placeholder="技术说明" />
  32. <van-field v-model="form.expect" rows="1" autosize label="预期目标" type="textarea" placeholder="预期目标" />
  33. <van-field v-model="form.present" rows="1" autosize label="合作要求" type="textarea" placeholder="合作要求" />
  34. <van-field name="expertimage" label="产品图片(6)">
  35. <template #input
  36. ><upload
  37. :limit="6"
  38. :data="form.image"
  39. type="image"
  40. :url="`/files/imgpath/upload`"
  41. @upload="uploadSuccess"
  42. :uploadBtn="true"
  43. @delete="uploadDelete"
  44. ></upload>
  45. </template>
  46. </van-field>
  47. <div style="margin: 16px;">
  48. <van-button round block type="info" @click="onSubmit">
  49. 提交
  50. </van-button>
  51. </div>
  52. </van-form>
  53. </span>
  54. <span v-else-if="type == '1'">
  55. <van-form>
  56. <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
  57. <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
  58. <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
  59. <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" />
  60. <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" />
  61. <van-field v-model="form.name" name="成果名称" label="成果名称" placeholder="成果名称" />
  62. <van-field readonly clickable name="picker" :value="form.field" label="所属领域" placeholder="点击选择" @click="fieldpic = true" />
  63. <van-popup v-model="fieldpic" position="bottom">
  64. <van-picker show-toolbar :columns="field" @confirm="fieldSubmit" @cancel="fieldpic = false" />
  65. </van-popup>
  66. <van-field readonly clickable name="picker" :value="form.cooperation" label="合作方式" placeholder="点击选择" @click="cooperationpic = true" />
  67. <van-popup v-model="cooperationpic" position="bottom">
  68. <van-picker show-toolbar :columns="cooperation" @confirm="cooperationSubmit" @cancel="cooperationpic = false" />
  69. </van-popup>
  70. <van-field readonly clickable name="picker" :value="form.achievestatus" label="成果状态" placeholder="点击选择" @click="achievestatuspic = true" />
  71. <van-popup v-model="achievestatuspic" position="bottom">
  72. <van-picker show-toolbar :columns="achievestatus" @confirm="achievestatusOnsubmit" @cancel="achievestatuspic = false" />
  73. </van-popup>
  74. <van-field v-model="form.achieveown" name="成果权属" label="成果权属" placeholder="成果权属" />
  75. <van-field name="radio" label="成果来源">
  76. <template #input>
  77. <van-radio-group v-model="form.achievesource" direction="horizontal">
  78. <van-radio name="国家项目">国家项目</van-radio>
  79. <van-radio name="省级项目">省级项目</van-radio>
  80. <van-radio name="市级项目">市级项目</van-radio>
  81. <van-radio name="市级项目">市级项目</van-radio>
  82. </van-radio-group>
  83. </template>
  84. </van-field>
  85. <van-field v-model="form.intentionprice" name="意向价格" label="意向价格" placeholder="意向价格" />
  86. <van-field name="patent" label="专利信息">
  87. <template #input>
  88. <el-button type="primary" size="mini" @click="addPatent">添加</el-button>
  89. <el-button type="primary" size="mini" @click="viewPatent">查看</el-button>
  90. </template>
  91. </van-field>
  92. <!-- <van-field v-model="form.roadshow" name="项目路演" label="项目路演" placeholder="项目路演" /> -->
  93. <van-field v-model="form.achievebrief" rows="1" autosize label="成果简介" type="textarea" placeholder="成果简介" />
  94. <van-field v-model="form.features" rows="1" autosize label="技术特点" type="textarea" placeholder="技术特点" />
  95. <van-field v-model="form.team" rows="1" autosize label="技术团队" type="textarea" placeholder="技术团队" />
  96. <van-field v-model="form.expectations" rows="1" autosize label="商业预期" type="textarea" placeholder="商业预期" />
  97. <van-field v-model="form.condition" rows="1" autosize label="合作要求" type="textarea" placeholder="合作要求" />
  98. <van-field name="expertimage" label="产品图片(6)">
  99. <template #input
  100. ><upload
  101. :limit="6"
  102. :data="form.image"
  103. type="image"
  104. :url="`/files/imgpath/upload`"
  105. @upload="uploadSuccess"
  106. :uploadBtn="true"
  107. @delete="uploadDelete"
  108. ></upload>
  109. </template>
  110. </van-field>
  111. <div style="margin: 16px;">
  112. <van-button round block type="info" @click="onSubmit">
  113. 提交
  114. </van-button>
  115. </div>
  116. </van-form>
  117. </span>
  118. <span v-else-if="type == '2'">
  119. <van-form>
  120. <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
  121. <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
  122. <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
  123. <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" />
  124. <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" />
  125. <van-field v-model="form.name" name="信息名称" label="信息名称" placeholder="信息名称" />
  126. <van-field name="radio" label="信息属性">
  127. <template #input>
  128. <van-radio-group v-model="form.messattribute" direction="horizontal">
  129. <van-radio name="提供方">提供方</van-radio>
  130. <van-radio name="需求方">需求方</van-radio>
  131. </van-radio-group>
  132. </template>
  133. </van-field>
  134. <van-field name="radio" label="需求程度">
  135. <template #input>
  136. <van-radio-group v-model="form.demand" direction="horizontal">
  137. <van-radio name="特急">特急</van-radio>
  138. <van-radio name="一般">一般</van-radio>
  139. <van-radio name="长期">长期</van-radio>
  140. </van-radio-group>
  141. </template>
  142. </van-field>
  143. <van-field v-model="form.informationdesc" rows="1" autosize label="信息描述" type="textarea" placeholder="信息描述" />
  144. <van-field v-model="form.coreelements" rows="1" autosize label="核心要素" type="textarea" placeholder="核心要素" />
  145. <van-field v-model="form.priceinfo" rows="1" autosize label="价格信息" type="textarea" placeholder="价格信息" />
  146. <van-field v-model="form.businessexpect" rows="1" autosize label="商业预期" type="textarea" placeholder="商业预期" />
  147. <div style="margin: 16px;">
  148. <van-button round block type="info" @click="onSubmit">
  149. 提交
  150. </van-button>
  151. </div>
  152. </van-form>
  153. </span>
  154. </el-col>
  155. </el-row>
  156. <van-dialog v-model="show" title="添加专利信息" :showConfirmButton="false" :closeOnClickOverlay="true">
  157. <van-form>
  158. <van-field v-model="patentform.patentinfo" name="名称" label="名称" placeholder="名称" />
  159. <van-field name="radio" label="专利状态">
  160. <template #input>
  161. <van-radio-group v-model="patentform.patentstatus" direction="horizontal">
  162. <van-radio name="已申请">已申请</van-radio>
  163. <van-radio name="已授权">已授权</van-radio>
  164. </van-radio-group>
  165. </template>
  166. </van-field>
  167. <div style="margin: 16px;">
  168. <van-button round block type="info" @click="patentSubmit">
  169. 提交
  170. </van-button>
  171. </div>
  172. </van-form>
  173. </van-dialog>
  174. <van-dialog v-model="patentshow" title="查看专利信息" :showConfirmButton="false" :closeOnClickOverlay="true">
  175. <div class="patentList" v-for="(item, index) in patentList" :key="index">
  176. <p class="textOver">{{ item.patentinfo }}</p>
  177. <p>专利状态:{{ item.patentstatus }}</p>
  178. <p>
  179. <el-button type="primary" size="mini" @click="delPatent(index, item)">刪除</el-button>
  180. </p>
  181. </div>
  182. </van-dialog>
  183. </div>
  184. </template>
  185. <script>
  186. import upload from '@/components/upload.vue';
  187. import { mapState, createNamespacedHelpers } from 'vuex';
  188. export default {
  189. name: 'apply',
  190. props: {
  191. type: { type: String, default: '0' },
  192. form: { type: Object },
  193. fieldList: { type: Array },
  194. cooperationList: { type: Array },
  195. achievestatusList: { type: Array },
  196. },
  197. components: {
  198. upload,
  199. },
  200. data: function() {
  201. return {
  202. field: [],
  203. fieldpic: false,
  204. cooperation: [],
  205. cooperationpic: false,
  206. achievestatus: [],
  207. achievestatuspic: false,
  208. // 专利信息
  209. show: false,
  210. patentform: {},
  211. patentshow: false,
  212. patentList: [],
  213. };
  214. },
  215. created() {},
  216. methods: {
  217. // 重组数组
  218. seachfield() {
  219. let field = this.fieldList.map(item => item.name);
  220. this.$set(this, `field`, field);
  221. },
  222. // 所屬領域
  223. fieldSubmit(value) {
  224. this.$set(this.form, `field`, value);
  225. this.fieldpic = false;
  226. },
  227. // 重组数组
  228. searchcooperation() {
  229. let cooperation = this.cooperationList.map(item => item.name);
  230. this.$set(this, `cooperation`, cooperation);
  231. },
  232. // 合作方式
  233. cooperationSubmit(value) {
  234. this.$set(this.form, `cooperation`, value);
  235. this.cooperationpic = false;
  236. },
  237. // 重组数组
  238. searchachievestatus() {
  239. let achievestatus = this.achievestatusList.map(item => item.name);
  240. this.$set(this, `achievestatus`, achievestatus);
  241. },
  242. // 成果状态
  243. achievestatusOnsubmit(value) {
  244. this.$set(this.form, `achievestatus`, value);
  245. this.achievestatuspic = false;
  246. },
  247. // 图片上传
  248. uploadSuccess({ type, data }) {
  249. let arr = _.get(this.form, type);
  250. if (_.isArray(arr)) {
  251. let datas = { name: data.name, url: data.uri };
  252. this.form[type].push({ name: data.name, url: data.uri });
  253. } else {
  254. let newArr = [{ name: data.name, url: data.uri }];
  255. this.$set(this.form, `${type}`, newArr);
  256. }
  257. },
  258. // 删除图片
  259. uploadDelete(index) {
  260. this.form.image.splice(index, 1);
  261. },
  262. // 添加专利信息
  263. addPatent() {
  264. this.show = true;
  265. },
  266. // 提交专利信息
  267. patentSubmit() {
  268. this.patentList.push(this.patentform);
  269. this.show = false;
  270. },
  271. // 查看专利信息
  272. viewPatent() {
  273. this.patentshow = true;
  274. },
  275. // 删除专利信息
  276. delPatent(index, val) {
  277. this.patentList.splice(index, 1);
  278. this.$notify({
  279. message: '删除成功',
  280. type: 'success',
  281. });
  282. this.patentshow = false;
  283. },
  284. onSubmit() {
  285. this.form.patent = this.patentList;
  286. this.$emit('onSubmit', { data: this.form });
  287. },
  288. // 查询专利信息
  289. searchpatent() {
  290. let data = this.form;
  291. if (data.patent) {
  292. console.log(data.patent);
  293. this.$set(this, `patentList`, data.patent);
  294. }
  295. },
  296. },
  297. watch: {
  298. fieldList: {
  299. immediate: true,
  300. deep: true,
  301. handler(val) {
  302. this.seachfield();
  303. },
  304. },
  305. cooperationList: {
  306. immediate: true,
  307. deep: true,
  308. handler(val) {
  309. this.searchcooperation();
  310. },
  311. },
  312. achievestatusList: {
  313. immediate: true,
  314. deep: true,
  315. handler(val) {
  316. this.searchachievestatus();
  317. },
  318. },
  319. form: {
  320. immediate: true,
  321. deep: true,
  322. handler(val) {
  323. this.searchpatent();
  324. },
  325. },
  326. },
  327. computed: {
  328. ...mapState(['user']),
  329. pageTitle() {
  330. return `${this.$route.meta.title}`;
  331. },
  332. },
  333. metaInfo() {
  334. return { title: this.$route.meta.title };
  335. },
  336. };
  337. </script>
  338. <style lang="less" scoped>
  339. .patentList {
  340. padding: 0 10px;
  341. border-bottom: 1px dashed #ccc;
  342. p {
  343. font-size: 16px;
  344. color: #666;
  345. padding: 0 0 5px 0;
  346. }
  347. p:nth-child(1) {
  348. font-size: 18px;
  349. color: #000;
  350. font-weight: bold;
  351. }
  352. p:nth-child(3) {
  353. text-align: center;
  354. }
  355. }
  356. </style>