index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24">
  5. <el-col :span="24" class="main">
  6. <el-tabs v-model="activeName" type="card">
  7. <el-tab-pane label="待审核" name="first">
  8. <one :oneList="oneList" :total="oneTotal" @handleDelete="handleDelete" @handleEdit="handleEdit"></one>
  9. </el-tab-pane>
  10. <el-tab-pane label="审核成功" name="second">
  11. <two :oneList="twoList" :total="twoTotal" @handleDelete="handleDelete"></two>
  12. </el-tab-pane>
  13. <el-tab-pane label="审核失败" name="third">
  14. <three :oneList="threeList" :total="threeTotal" @handleDelete="handleDelete"></three>
  15. </el-tab-pane>
  16. </el-tabs>
  17. </el-col>
  18. <el-dialog width="60%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
  19. <el-form ref="form" :model="form" label-width="140px" :rules="rules">
  20. <el-form-item label="审核信息状态">
  21. <el-radio v-model="form.status" label="0" disabled>待审核</el-radio>
  22. <el-radio v-model="form.status" label="1">审核通过</el-radio>
  23. <el-radio v-model="form.status" label="2">审核拒绝</el-radio>
  24. </el-form-item>
  25. <el-form-item label="产品类型" prop="totaltype">
  26. <el-select v-model="form.type" placeholder="请选择产品类型">
  27. <el-option label="技术" value="0"></el-option> <el-option label="产品" value="1"></el-option> <el-option label="商务" value="2"></el-option>
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="名称"> <el-input v-model="form.name" placeholder="请输入名称"></el-input> </el-form-item>
  31. <el-form-item label="联系人"> <el-input v-model="form.contacts" placeholder="请输入联系人"></el-input> </el-form-item>
  32. <el-form-item label="联系电话"> <el-input v-model="form.phone" placeholder="请输入联系电话"></el-input> </el-form-item>
  33. <el-form-item label="QQ/微信"> <el-input v-model="form.qqwx" placeholder="请输入QQ/微信"></el-input> </el-form-item>
  34. <el-form-item label="电子邮箱"> <el-input v-model="form.email" placeholder="请输入电子邮箱"></el-input> </el-form-item>
  35. <span v-if="form.type == '0' || form.type == '1'">
  36. <el-form-item label="所属领域">
  37. <el-select v-model="form.field" filterable>
  38. <el-option v-for="(item, index) in fieldList" :key="index" :value="item.name" :label="item.name"></el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="合作方式">
  42. <el-select v-model="form.cooperation" filterable>
  43. <el-option v-for="(item, index) in cooperationList" :key="index" :value="item.name" :label="item.name"></el-option>
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item label="企业名称"> <el-input v-model="form.company" placeholder="请输入企业名称"></el-input> </el-form-item>
  47. <el-form-item label="企业简介">
  48. <el-input
  49. v-model="form.companybrief"
  50. type="textarea"
  51. maxlength="300"
  52. show-word-limit
  53. :autosize="{ minRows: 2, maxRows: 5 }"
  54. placeholder="请输入企业简介"
  55. ></el-input>
  56. </el-form-item>
  57. <el-form-item label="企业网站"> <el-input v-model="form.companyweb" placeholder="请输入企业网站"></el-input> </el-form-item>
  58. <el-form-item label="合作条件及要求">
  59. <el-input
  60. v-model="form.condition"
  61. type="textarea"
  62. maxlength="300"
  63. show-word-limit
  64. :autosize="{ minRows: 2, maxRows: 5 }"
  65. placeholder="请输入合作条件及要求"
  66. ></el-input>
  67. </el-form-item>
  68. <el-form-item label="产品图片" prop="image">
  69. <upload
  70. :limit="6"
  71. :data="form.image"
  72. :uploadBtn="true"
  73. type="image"
  74. :url="`/files/image/upload`"
  75. @upload="uploadSuccess"
  76. @delete="uploadDelete"
  77. ></upload>
  78. </el-form-item>
  79. </span>
  80. <!-- 技术 -->
  81. <span v-if="form.type == '0'">
  82. <el-form-item label="投资预算"> <el-input v-model="form.budget" placeholder="请输入投资预算"></el-input> </el-form-item>
  83. <el-form-item label="注册类型"> <el-input v-model="form.companytype" placeholder="请输入注册类型"></el-input> </el-form-item>
  84. <el-form-item label="统一社会信用代码"> <el-input v-model="form.zzjgdm" placeholder="请输入统一社会信用代码"></el-input> </el-form-item>
  85. <el-form-item label="注册时间">
  86. <el-date-picker v-model="form.companydate" type="date" placeholder="请选择时间" format="yyyy-MM-dd" value-format="yyyy-MM-dd"> </el-date-picker>
  87. </el-form-item>
  88. <el-form-item label="注册资金"> <el-input v-model="form.companycapital" placeholder="请输入注册资金"></el-input> </el-form-item>
  89. <el-form-item label="企业法人"> <el-input v-model="form.companyperson" placeholder="请输入企业法人"></el-input> </el-form-item>
  90. <el-form-item label="上年度企业总收入"> <el-input v-model="form.sndqyzsr" placeholder="请输入上年度企业总收入"></el-input> </el-form-item>
  91. <el-form-item label="上年度研发费用"> <el-input v-model="form.sndyffy" placeholder="请输入上年度研发费用"></el-input> </el-form-item>
  92. <el-form-item label="企业总人数"> <el-input v-model="form.companytotal" placeholder="请输入企业总人数"></el-input> </el-form-item>
  93. <el-form-item label="专&兼职研发人数"> <el-input v-model="form.zjzyfrs" placeholder="请输入专&兼职研发人数"></el-input> </el-form-item>
  94. <el-form-item label="需求紧急程度">
  95. <el-radio-group v-model="form.degreeurgency">
  96. <el-radio label="特急"></el-radio> <el-radio label="一般"></el-radio> <el-radio label="储备"></el-radio>
  97. </el-radio-group>
  98. </el-form-item>
  99. <el-form-item label="技术难题&需求说明">
  100. <el-input
  101. v-model="form.requirementdesc"
  102. type="textarea"
  103. maxlength="500"
  104. show-word-limit
  105. :autosize="{ minRows: 2, maxRows: 5 }"
  106. placeholder="请输入技术难题&需求说明"
  107. ></el-input>
  108. </el-form-item>
  109. <el-form-item label="预期技术目标描述">
  110. <el-input
  111. v-model="form.expect"
  112. type="textarea"
  113. maxlength="300"
  114. show-word-limit
  115. :autosize="{ minRows: 2, maxRows: 5 }"
  116. placeholder="请输入预期技术目标描述"
  117. ></el-input>
  118. </el-form-item>
  119. <el-form-item label="需求现状及应对措施">
  120. <el-input
  121. v-model="form.present"
  122. type="textarea"
  123. maxlength="300"
  124. show-word-limit
  125. :autosize="{ minRows: 2, maxRows: 5 }"
  126. placeholder="请输入需求现状及应对措施"
  127. ></el-input>
  128. </el-form-item>
  129. <el-form-item label="主要产品">
  130. <el-input
  131. v-model="form.mainproduct"
  132. type="textarea"
  133. maxlength="300"
  134. show-word-limit
  135. :autosize="{ minRows: 2, maxRows: 5 }"
  136. placeholder="请输入主要产品"
  137. ></el-input>
  138. </el-form-item>
  139. <el-form-item label="企业资质&荣誉">
  140. <el-input
  141. v-model="form.qualifications"
  142. type="textarea"
  143. maxlength="300"
  144. show-word-limit
  145. :autosize="{ minRows: 2, maxRows: 5 }"
  146. placeholder="请输入企业资质&荣誉"
  147. ></el-input>
  148. </el-form-item>
  149. </span>
  150. <!-- 产品 -->
  151. <span v-else-if="form.type == '1'">
  152. <el-form-item label="成果状态">
  153. <el-select v-model="form.achievestatus" filterable>
  154. <el-option v-for="(item, index) in achievestatusList" :key="index" :value="item.name" :label="item.name"></el-option>
  155. </el-select>
  156. </el-form-item>
  157. <el-form-item label="成果权属"> <el-input v-model="form.achieveown" placeholder="请输入成果权属"></el-input> </el-form-item>
  158. <el-form-item label="成果来源">
  159. <el-radio-group v-model="form.degreeurgency">
  160. <el-radio label="国家项目"></el-radio> <el-radio label="省级项目"></el-radio> <el-radio label="市级项目"></el-radio>
  161. <el-radio label="自选项目"></el-radio>
  162. </el-radio-group>
  163. </el-form-item>
  164. <el-form-item label="专利信息"> <el-input v-model="form.patentinfo" placeholder="请输入专利信息"></el-input> </el-form-item>
  165. <el-form-item label="专利状态">
  166. <el-radio-group v-model="form.patentstatus"> <el-radio label="已申请"></el-radio> <el-radio label="已授权"></el-radio> </el-radio-group>
  167. </el-form-item>
  168. <el-form-item label="项目路演"> <el-input v-model="form.roadshow" placeholder="请输入项目路演"></el-input> </el-form-item>
  169. <el-form-item label="意向价格"> <el-input v-model="form.intentionprice" placeholder="请输入意向价格"></el-input> </el-form-item>
  170. <el-form-item label="成果简介">
  171. <el-input
  172. v-model="form.achievebrief"
  173. type="textarea"
  174. maxlength="200"
  175. show-word-limit
  176. :autosize="{ minRows: 2, maxRows: 5 }"
  177. placeholder="请输入成果简介"
  178. ></el-input>
  179. </el-form-item>
  180. <el-form-item label="技术特点">
  181. <el-input
  182. v-model="form.features"
  183. type="textarea"
  184. maxlength="200"
  185. show-word-limit
  186. :autosize="{ minRows: 2, maxRows: 5 }"
  187. placeholder="请输入技术特点"
  188. ></el-input>
  189. </el-form-item>
  190. <el-form-item label="技术团队">
  191. <el-input
  192. v-model="form.team"
  193. type="textarea"
  194. maxlength="300"
  195. show-word-limit
  196. :autosize="{ minRows: 2, maxRows: 5 }"
  197. placeholder="请输入技术团队"
  198. ></el-input>
  199. </el-form-item>
  200. <el-form-item label="商业预期">
  201. <el-input
  202. v-model="form.expectations"
  203. type="textarea"
  204. maxlength="300"
  205. show-word-limit
  206. :autosize="{ minRows: 2, maxRows: 5 }"
  207. placeholder="请输入商业预期"
  208. ></el-input>
  209. </el-form-item>
  210. </span>
  211. <!-- 服务 -->
  212. <span v-else-if="form.type == '2'">
  213. <el-form-item label="信息属性">
  214. <el-radio-group v-model="form.messattribute"> <el-radio label="提供方"></el-radio> <el-radio label="需求方"></el-radio> </el-radio-group>
  215. </el-form-item>
  216. <el-form-item label="需求程度">
  217. <el-radio-group v-model="form.demand"> <el-radio label="特急"></el-radio> <el-radio label="一般"></el-radio> </el-radio-group>
  218. </el-form-item>
  219. <el-form-item label="信息描述">
  220. <el-input
  221. v-model="form.informationdesc"
  222. type="textarea"
  223. maxlength="300"
  224. show-word-limit
  225. :autosize="{ minRows: 2, maxRows: 5 }"
  226. placeholder="请输入信息描述"
  227. ></el-input>
  228. </el-form-item>
  229. <el-form-item label="核心要素">
  230. <el-input
  231. v-model="form.coreelements"
  232. type="textarea"
  233. maxlength="200"
  234. show-word-limit
  235. :autosize="{ minRows: 2, maxRows: 5 }"
  236. placeholder="请输入核心要素"
  237. ></el-input>
  238. </el-form-item>
  239. <el-form-item label="价格信息">
  240. <el-input
  241. v-model="form.priceinfo"
  242. type="textarea"
  243. maxlength="100"
  244. show-word-limit
  245. :autosize="{ minRows: 2, maxRows: 5 }"
  246. placeholder="请输入价格信息"
  247. ></el-input>
  248. </el-form-item>
  249. <el-form-item label="商务预期">
  250. <el-input
  251. v-model="form.businessexpect"
  252. type="textarea"
  253. maxlength="200"
  254. show-word-limit
  255. :autosize="{ minRows: 2, maxRows: 5 }"
  256. placeholder="请输入商务预期"
  257. ></el-input>
  258. </el-form-item>
  259. </span>
  260. <el-form-item>
  261. <el-button type="primary" @click="examineBtn()">审核提交</el-button>
  262. </el-form-item>
  263. </el-form>
  264. </el-dialog>
  265. </el-col>
  266. </el-row>
  267. </div>
  268. </template>
  269. <script>
  270. import one from './parts/one.vue';
  271. import two from './parts/two.vue';
  272. import three from './parts/three.vue';
  273. import upload from '@/components/uploadProduct.vue';
  274. import { mapState, createNamespacedHelpers } from 'vuex';
  275. const { mapActions: markettype } = createNamespacedHelpers('markettype');
  276. const { mapActions: collectproduct } = createNamespacedHelpers('collectproduct');
  277. export default {
  278. name: 'index',
  279. props: {},
  280. components: {
  281. one,
  282. two,
  283. three,
  284. // upload,
  285. },
  286. data: function() {
  287. return {
  288. activeName: 'first',
  289. oneList: [],
  290. oneTotal: 0,
  291. twoList: [],
  292. twoTotal: 0,
  293. threeList: [],
  294. threeTotal: 0,
  295. dialog: false,
  296. form: {},
  297. // 验证
  298. rules: {
  299. name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
  300. },
  301. // 所属领域
  302. fieldList: [],
  303. // 成果状态
  304. achievestatusList: [],
  305. // 合作方式
  306. cooperationList: [],
  307. };
  308. },
  309. created() {
  310. this.searchtype();
  311. this.search();
  312. },
  313. methods: {
  314. ...markettype({ markettypeList: 'query' }),
  315. ...collectproduct(['query', 'delete', 'update', 'fetch']),
  316. // 查询字典表
  317. async searchtype() {
  318. // 所属领域;
  319. let res = await this.markettypeList({ category: '01' });
  320. if (this.$checkRes(res)) {
  321. this.$set(this, `fieldList`, res.data);
  322. }
  323. // 成果状态;
  324. res = await this.markettypeList({ category: '02' });
  325. if (this.$checkRes(res)) {
  326. this.$set(this, `achievestatusList`, res.data);
  327. }
  328. // 合作方式;
  329. res = await this.markettypeList({ category: '03' });
  330. if (this.$checkRes(res)) {
  331. this.$set(this, `cooperationList`, res.data);
  332. }
  333. },
  334. // 查询列表
  335. async search({ skip = 0, limit = 10, ...info } = {}) {
  336. let one = await this.query({ skip, limit, status: '0', ...info });
  337. let two = await this.query({ skip, limit, status: '1', ...info });
  338. let three = await this.query({ skip, limit, status: '2', ...info });
  339. this.$set(this, `oneList`, one.data);
  340. this.$set(this, `twoList`, two.data);
  341. this.$set(this, `threeList`, three.data);
  342. this.$set(this, `onetotal`, one.total);
  343. this.$set(this, `twototal`, two.total);
  344. this.$set(this, `threetotal`, three.total);
  345. },
  346. toEdit({ data }) {
  347. this.dialog = true;
  348. this.$set(this, `form`, data);
  349. },
  350. async toDelete({ data }) {
  351. let res = await this.delete(data.id);
  352. this.$message({
  353. message: '刪除信息成功',
  354. type: 'success',
  355. });
  356. this.search();
  357. },
  358. // 审核
  359. handleEdit(data) {
  360. this.$set(this, `form`, data);
  361. this.dialog = true;
  362. },
  363. // 提交
  364. async examineBtn() {
  365. let data = this.form;
  366. const res = await this.update(data);
  367. if (this.$checkRes(res)) {
  368. this.$message({
  369. message: '修改信息成功',
  370. type: 'success',
  371. });
  372. this.dialog = false;
  373. }
  374. },
  375. // 取消
  376. handleClose() {
  377. this.form = {};
  378. this.dialog = false;
  379. },
  380. // 刪除
  381. async handleDelete(id) {
  382. const res = await this.delete(id);
  383. if (this.$checkRes(res)) {
  384. this.$message({
  385. message: '删除信息成功',
  386. type: 'success',
  387. });
  388. this.search();
  389. }
  390. },
  391. // 图片
  392. uploadSuccess({ type, data }) {
  393. let arr = _.get(this.form, type);
  394. if (_.isArray(arr)) {
  395. let datas = { name: data.name, url: data.uri };
  396. this.form[type].push({ name: data.name, url: data.uri });
  397. } else {
  398. let newArr = [{ name: data.name, url: data.uri }];
  399. this.$set(this.form, `${type}`, newArr);
  400. }
  401. },
  402. // 删除图片
  403. uploadDelete(index) {
  404. this.form.image.splice(index, 1);
  405. },
  406. },
  407. computed: {
  408. ...mapState(['user']),
  409. pageTitle() {
  410. return `${this.$route.meta.title}`;
  411. },
  412. },
  413. metaInfo() {
  414. return { title: this.$route.meta.title };
  415. },
  416. };
  417. </script>
  418. <style lang="less" scoped></style>