trans-create.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <div id="trans-create">
  3. <van-row>
  4. <van-col span="24" class="main">
  5. <van-col span="24" class="one">
  6. <van-form @submit="onSubmit" label-width="5em">
  7. <van-field v-model="form.create_number" name="create_number" label="专利号" placeholder="请输入专利号" />
  8. <van-field v-model="form.patent_name" name="patent_name" label="专利名称" placeholder="请输入专利名称" />
  9. <van-field v-model="form.on_obligee" name="on_obligee" label="当前权利人" placeholder="请输入当前权利人" />
  10. <van-field v-model="form.on_afterobligee" name="on_afterobligee" label="变更后专利权人" placeholder="请输入变更后专利权人" />
  11. <van-field v-model="form.contact" name="contact" label="联系人" placeholder="请输入联系人" />
  12. <van-field v-model="form.phone" name="phone" label="联系电话" placeholder="请输入联系电话" />
  13. <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请输入电子邮箱" />
  14. <van-field name="budgetType" label="价格类型">
  15. <template #input>
  16. <van-radio-group v-model="form.budget_type" direction="horizontal">
  17. <van-radio name="1">面议</van-radio>
  18. <van-radio name="2">金额区间(万元)</van-radio>
  19. </van-radio-group>
  20. </template>
  21. </van-field>
  22. <van-field v-model="form.budget_min" name="budget_min" type="digit" label="最小价格" placeholder="请输入价格" v-if="form.budget_type == '2'" />
  23. <van-field v-model="form.budget_max" name="budget_max" type="digit" label="最大价格" placeholder="请输入价格" v-if="form.budget_type == '2'" />
  24. <van-field name="type" label="交易类型">
  25. <template #input>
  26. <van-radio-group v-model="form.type" direction="horizontal">
  27. <van-radio name="转让">转让</van-radio>
  28. <van-radio name="许可">许可</van-radio>
  29. <van-radio name="免费许可">免费许可</van-radio>
  30. <van-radio name="招商">招商</van-radio>
  31. <van-radio name="质押">质押</van-radio>
  32. </van-radio-group>
  33. </template>
  34. </van-field>
  35. <van-col span="24" class="typeThr" v-if="form.type == '免费许可'">
  36. <van-col span="24" class="title"> 免费许可承诺书 </van-col>
  37. <van-col span="24" class="info">
  38. 公开声明:【{{ form.patent_name }}】专利权人许可本专利在【
  39. <span @click.prevent="typeSelect('province')">{{ form.promise_file.province }}</span>
  40. 】【
  41. <span @click.prevent="typeSelect('city')">{{ form.promise_file.city }}</span>
  42. 】范围内免费使用,期限至【
  43. <span @click.prevent="typeSelect('end_date')">{{ form.promise_file.end_date }}</span>
  44. 】止,被许可人需与许可人签订许可合同后方可使用。
  45. </van-col>
  46. <van-popup v-model="oneShow" position="bottom">
  47. <van-picker show-toolbar :columns="provinceList" @confirm="oneFirm" @cancel="oneShow = false" />
  48. </van-popup>
  49. <van-popup v-model="twoShow" position="bottom">
  50. <van-picker show-toolbar :columns="cityList" @confirm="twoFirm" @cancel="twoShow = false" />
  51. </van-popup>
  52. <van-calendar v-model="thrShow" @confirm="thrFirm" :min-date="minDate" :max-date="maxDate" />
  53. </van-col>
  54. <van-field name="is_report" label="评估报告">
  55. <template #input>
  56. <van-radio-group v-model="form.is_report" direction="horizontal">
  57. <van-radio :name="true">有</van-radio>
  58. <van-radio :name="false">无</van-radio>
  59. </van-radio-group>
  60. </template>
  61. </van-field>
  62. <van-field name="report" label="报告文件">
  63. <template #input>
  64. <van-uploader
  65. :fileList="form.report"
  66. :max-count="1"
  67. :after-read="(file) => toUpload(file, 'report')"
  68. @delete="(file) => toDelete(file, 'report')"
  69. />
  70. </template>
  71. </van-field>
  72. <van-field v-model="form.abstract" name="abstract" label="摘要" placeholder="请输入摘要" type="textarea" autosize rows="1" />
  73. <van-field v-model="form.requirementdesc" name="requirementdesc" label="技术说明" placeholder="请输入技术说明" type="textarea" autosize rows="1" />
  74. <van-field v-model="form.expect" name="expect" label="商业预期" placeholder="请输入商业预期" type="textarea" autosize rows="1" />
  75. <van-field v-model="form.condition" name="condition" label="合作条件及要求" placeholder="请输入合作条件及要求" type="textarea" autosize rows="1" />
  76. <van-field
  77. :value="form.transfer_date"
  78. name="transfer_date"
  79. label="专利权转移日期"
  80. placeholder="点击选择"
  81. @click="selectDate('transfer_date')"
  82. :rules="[{ required: false, message: '专利权转移日期' }]"
  83. />
  84. <!-- 选择日期公用弹框 -->
  85. <van-calendar v-model="calendarShow" @confirm="calendarCon" :min-date="minDate" :max-date="maxDate" />
  86. <van-field name="status" label="交易状态">
  87. <template #input>
  88. <van-radio-group v-model="form.status" direction="horizontal">
  89. <van-radio name="1">转让信息</van-radio>
  90. <van-radio name="2">交易公告</van-radio>
  91. <van-radio name="5">已成交专利</van-radio>
  92. </van-radio-group>
  93. </template>
  94. </van-field>
  95. <van-col span="24" class="btn">
  96. <van-button type="info" size="small" native-type="submit">提交交易</van-button>
  97. </van-col>
  98. </van-form>
  99. </van-col>
  100. </van-col>
  101. </van-row>
  102. </div>
  103. </template>
  104. <script>
  105. import { mapState, createNamespacedHelpers } from 'vuex';
  106. const { mapActions: upload } = createNamespacedHelpers('upload');
  107. const moment = require('moment');
  108. export default {
  109. name: 'trans-create',
  110. props: {
  111. form: { type: Object },
  112. },
  113. components: {},
  114. data: function () {
  115. return {
  116. type: '',
  117. // 省份
  118. oneShow: false,
  119. provinceList: ['吉林省'],
  120. // 城市
  121. twoShow: false,
  122. cityList: ['长春市', '吉林市', '四平市', '辽源市', '通化市', '白山市', '白城市', '延边州', '松原市', '长白山管委会'],
  123. // 截止日期
  124. thrShow: false,
  125. minDate: new Date(1900, 1, 1),
  126. maxDate: new Date(2050, 1, 1),
  127. // 专利转移日期
  128. calendarShow: false,
  129. calendar_type: '',
  130. };
  131. },
  132. created() {},
  133. methods: {
  134. ...upload(['upload']),
  135. onSubmit(value) {
  136. if (value) this.$emit('onSubmit', { data: this.form });
  137. },
  138. // 承诺书信息
  139. typeSelect(type) {
  140. this.$set(this, `type`, type);
  141. if (type == 'province') this.oneShow = true;
  142. else if (type == 'city') this.twoShow = true;
  143. else if (type == 'end_date') this.thrShow = true;
  144. },
  145. // 确认选择省份
  146. oneFirm(value) {
  147. this.$set(this.form.promise_file, `${this.type}`, value);
  148. this.oneShow = false;
  149. },
  150. // 确认选择城市
  151. twoFirm(value) {
  152. this.$set(this.form.promise_file, `${this.type}`, value);
  153. this.twoShow = false;
  154. },
  155. // 确认选择日历
  156. thrFirm(value) {
  157. this.$set(this.form.promise_file, `${this.type}`, moment(value).format('YYYY-MM-DD'));
  158. this.thrShow = false;
  159. },
  160. // 打开选择日期弹框
  161. selectDate(type) {
  162. this.$set(this, `calendar_type`, type);
  163. this.calendarShow = true;
  164. },
  165. // 选中日期
  166. calendarCon(date) {
  167. this.$set(this.form, this.calendar_type, moment(date).format('YYYY-MM-DD'));
  168. this.calendarShow = false;
  169. },
  170. async toUpload({ file }, model) {
  171. // 上传,赋值
  172. const res = await this.upload({ file, dir: 'file' });
  173. if (this.$checkRes(res)) {
  174. this.$set(this.form, model, [{ name: res.name, url: res.uri }]);
  175. }
  176. },
  177. toDelete(file, model) {
  178. const index = this.form[model].findIndex((f) => _.isEqual(f, file));
  179. this.form[model].splice(index, 1);
  180. },
  181. },
  182. computed: {
  183. ...mapState(['user']),
  184. },
  185. metaInfo() {
  186. return { title: this.$route.meta.title };
  187. },
  188. watch: {
  189. test: {
  190. deep: true,
  191. immediate: true,
  192. handler(val) {},
  193. },
  194. },
  195. };
  196. </script>
  197. <style lang="less" scoped>
  198. .main {
  199. .one {
  200. .btn {
  201. text-align: center;
  202. margin: 10px 0;
  203. }
  204. .typeThr {
  205. padding: 10px;
  206. background-color: #fff;
  207. .title {
  208. text-align: center;
  209. font-weight: bold;
  210. margin: 0 0 15px 0;
  211. }
  212. .info {
  213. padding: 0 0 15px 0;
  214. line-height: 25px;
  215. border-bottom: 1px solid #ebedf0;
  216. span {
  217. color: #409eff;
  218. }
  219. span:hover {
  220. cursor: pointer;
  221. }
  222. }
  223. }
  224. }
  225. }
  226. </style>