nextLive.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. <template>
  2. <div id="nextLive">
  3. <el-row>
  4. <el-col :span="24">
  5. <el-table :data="nextData" stripe style="width: 100%" border>
  6. <el-table-column prop="room_id" label="房间号" align="center" :show-overflow-tooltip="true"> </el-table-column>
  7. <el-table-column prop="title" label="对接会标题" align="center" :show-overflow-tooltip="true"> </el-table-column>
  8. <el-table-column prop="start_time" label="开始时间" align="center" :show-overflow-tooltip="true"> </el-table-column>
  9. <el-table-column prop="end_time" label="结束时间" align="center" :show-overflow-tooltip="true"> </el-table-column>
  10. <el-table-column prop="join_end" label="报名截止时间" align="center" :show-overflow-tooltip="true"> </el-table-column>
  11. <el-table-column prop="sheng" label="省" align="center" :show-overflow-tooltip="true"> </el-table-column>
  12. <el-table-column prop="shi" label="市" align="center" :show-overflow-tooltip="true"> </el-table-column>
  13. <el-table-column prop="adminuser" label="负责人" align="center" :show-overflow-tooltip="true"> </el-table-column>
  14. <el-table-column prop="phone" label="联系电话" align="center" :show-overflow-tooltip="true"> </el-table-column>
  15. <el-table-column label="操作" style="width:200px" align="center">
  16. <template slot-scope="scope">
  17. <el-button size="mini" type="text" @click.prevent="handleEdit(scope.row.id)"
  18. ><el-tooltip class="item" effect="dark" content="申请" placement="top-start"> <i class="el-icon-view"></i> </el-tooltip
  19. ></el-button>
  20. </template>
  21. </el-table-column>
  22. </el-table>
  23. <el-col class="page" :span="24">
  24. <page :total="nextTotal" position="right"></page>
  25. </el-col>
  26. </el-col>
  27. </el-row>
  28. <el-dialog title="申请" :visible.sync="dialogFormVisible" :before-close="handleClose">
  29. <el-tabs v-model="activeName">
  30. <el-tab-pane label="技术需求" name="first">
  31. <el-form :model="demandForm" label-width="150px">
  32. <el-form-item label="产品类型" prop="totaltype">
  33. <el-select v-model="demandForm.type" placeholder="请选择产品类型">
  34. <el-option label="技术" value="0"></el-option>
  35. <el-option label="产品" value="1" disabled></el-option>
  36. <el-option label="商务" value="2" disabled></el-option>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item label="名称">
  40. <el-input v-model="demandForm.name" placeholder="请输入名称"></el-input>
  41. </el-form-item>
  42. <el-form-item label="联系人">
  43. <el-input v-model="demandForm.contacts" placeholder="请输入联系人"></el-input>
  44. </el-form-item>
  45. <el-form-item label="联系电话">
  46. <el-input v-model="demandForm.phone" placeholder="请输入联系电话"></el-input>
  47. </el-form-item>
  48. <el-form-item label="QQ&微信">
  49. <el-input v-model="demandForm.qqwx" placeholder="请输入QQ&微信"></el-input>
  50. </el-form-item>
  51. <el-form-item label="电子邮箱">
  52. <el-input v-model="demandForm.email" placeholder="请输入电子邮箱"></el-input>
  53. </el-form-item>
  54. <el-form-item label="所属领域">
  55. <el-select v-model="demandForm.field" filterable>
  56. <el-option v-for="(item, index) in fieldList" :key="index" :value="item.name" :label="item.name"></el-option>
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item label="合作方式">
  60. <el-select v-model="demandForm.cooperation" filterable>
  61. <el-option v-for="(item, index) in cooperationList" :key="index" :value="item.name" :label="item.name"></el-option>
  62. </el-select>
  63. </el-form-item>
  64. <el-form-item label="企业名称">
  65. <el-input v-model="demandForm.company" placeholder="请输入企业名称"></el-input>
  66. </el-form-item>
  67. <el-form-item label="企业简介">
  68. <el-input
  69. v-model="demandForm.companybrief"
  70. type="textarea"
  71. maxlength="300"
  72. show-word-limit
  73. :autosize="{ minRows: 2, maxRows: 5 }"
  74. placeholder="请输入企业简介"
  75. ></el-input>
  76. </el-form-item>
  77. <el-form-item label="企业网站">
  78. <el-input v-model="demandForm.companyweb" placeholder="请输入企业网站"></el-input>
  79. </el-form-item>
  80. <el-form-item label="合作条件及要求">
  81. <el-input
  82. v-model="demandForm.condition"
  83. type="textarea"
  84. maxlength="300"
  85. show-word-limit
  86. :autosize="{ minRows: 2, maxRows: 5 }"
  87. placeholder="请输入合作条件及要求"
  88. ></el-input>
  89. </el-form-item>
  90. <el-form-item label="产品图片" prop="image">
  91. <upload
  92. :limit="6"
  93. :data="demandForm.image"
  94. :uploadBtn="true"
  95. type="image"
  96. :url="`/files/image/upload`"
  97. @upload="uploadSuccess"
  98. @delete="uploadDelete"
  99. ></upload>
  100. </el-form-item>
  101. <el-form-item label="投资预算">
  102. <el-input v-model="demandForm.budget" placeholder="请输入投资预算"></el-input>
  103. </el-form-item>
  104. <el-form-item label="注册类型">
  105. <el-input v-model="demandForm.companytype" placeholder="请输入注册类型"></el-input>
  106. </el-form-item>
  107. <el-form-item label="组织机构代码">
  108. <el-input v-model="demandForm.zzjgdm" placeholder="请输入组织机构代码"></el-input>
  109. </el-form-item>
  110. <el-form-item label="注册时间">
  111. <el-date-picker v-model="demandForm.companydate" type="date" placeholder="请选择时间" format="yyyy-MM-dd" value-format="yyyy-MM-dd">
  112. </el-date-picker>
  113. </el-form-item>
  114. <el-form-item label="注册资金">
  115. <el-input v-model="demandForm.companycapital" placeholder="请输入注册资金"></el-input>
  116. </el-form-item>
  117. <el-form-item label="企业法人">
  118. <el-input v-model="demandForm.companyperson" placeholder="请输入企业法人"></el-input>
  119. </el-form-item>
  120. <el-form-item label="上年度企业总收入">
  121. <el-input v-model="demandForm.sndqyzsr" placeholder="请输入上年度企业总收入"></el-input>
  122. </el-form-item>
  123. <el-form-item label="上年度研发费用">
  124. <el-input v-model="demandForm.sndyffy" placeholder="请输入上年度研发费用"></el-input>
  125. </el-form-item>
  126. <el-form-item label="企业总人数">
  127. <el-input v-model="demandForm.companytotal" placeholder="请输入企业总人数"></el-input>
  128. </el-form-item>
  129. <el-form-item label="专&兼职研发人数">
  130. <el-input v-model="demandForm.zjzyfrs" placeholder="请输入专&兼职研发人数"></el-input>
  131. </el-form-item>
  132. <el-form-item label="需求紧急程度">
  133. <el-radio-group v-model="demandForm.degreeurgency">
  134. <el-radio label="特急"></el-radio>
  135. <el-radio label="一般"></el-radio>
  136. <el-radio label="储备"></el-radio>
  137. </el-radio-group>
  138. </el-form-item>
  139. <el-form-item label="技术难题&需求说明">
  140. <el-input
  141. v-model="demandForm.requirementdesc"
  142. type="textarea"
  143. maxlength="500"
  144. show-word-limit
  145. :autosize="{ minRows: 2, maxRows: 5 }"
  146. placeholder="请输入技术难题&需求说明"
  147. ></el-input>
  148. </el-form-item>
  149. <el-form-item label="预期技术目标描述">
  150. <el-input
  151. v-model="demandForm.expect"
  152. type="textarea"
  153. maxlength="300"
  154. show-word-limit
  155. :autosize="{ minRows: 2, maxRows: 5 }"
  156. placeholder="请输入预期技术目标描述"
  157. ></el-input>
  158. </el-form-item>
  159. <el-form-item label="需求现状及应对措施">
  160. <el-input
  161. v-model="demandForm.present"
  162. type="textarea"
  163. maxlength="300"
  164. show-word-limit
  165. :autosize="{ minRows: 2, maxRows: 5 }"
  166. placeholder="请输入需求现状及应对措施"
  167. ></el-input>
  168. </el-form-item>
  169. <el-form-item label="主要产品">
  170. <el-input
  171. v-model="demandForm.mainproduct"
  172. type="textarea"
  173. maxlength="300"
  174. show-word-limit
  175. :autosize="{ minRows: 2, maxRows: 5 }"
  176. placeholder="请输入主要产品"
  177. ></el-input>
  178. </el-form-item>
  179. <el-form-item label="企业资质&荣誉">
  180. <el-input
  181. v-model="demandForm.qualifications"
  182. type="textarea"
  183. maxlength="300"
  184. show-word-limit
  185. :autosize="{ minRows: 2, maxRows: 5 }"
  186. placeholder="请输入企业资质&荣誉"
  187. ></el-input>
  188. </el-form-item>
  189. <el-form-item>
  190. <el-button @click="resetForm('ruleForm')">取消</el-button>
  191. <el-button type="primary" @click="submitForm('ruleForm')">确定</el-button>
  192. </el-form-item>
  193. </el-form>
  194. </el-tab-pane>
  195. <el-tab-pane label="产品供求" name="second">
  196. <el-form :model="productForm" label-width="100px">
  197. <el-form-item label="选择产品">
  198. <el-select v-model="productForm.goodsList" value-key="id" multiple placeholder="请选择选择产品">
  199. <el-option v-for="(item, index) in goodsLists" :key="index" :label="item.name" :value="item"> </el-option>
  200. </el-select>
  201. </el-form-item>
  202. <el-form-item>
  203. <el-button @click="resetForm('ruleForm')">取消</el-button>
  204. <el-button type="primary" @click="submitproductForm('ruleForm')">确定</el-button>
  205. </el-form-item>
  206. </el-form>
  207. </el-tab-pane>
  208. </el-tabs>
  209. </el-dialog>
  210. </div>
  211. </template>
  212. <script>
  213. import page from '@/components/pagination.vue';
  214. import { mapState, createNamespacedHelpers } from 'vuex';
  215. import _ from 'lodash';
  216. import upload from '@/components/upload.vue';
  217. const { mapActions: dock } = createNamespacedHelpers('dock');
  218. const { mapActions: place } = createNamespacedHelpers('place');
  219. const { mapActions: apply } = createNamespacedHelpers('apply');
  220. const { mapActions: mapMarkettype } = createNamespacedHelpers('markettype');
  221. const { mapActions: mapProduct } = createNamespacedHelpers('marketproduct');
  222. export default {
  223. name: 'nextLive',
  224. props: {},
  225. components: {
  226. page,
  227. upload,
  228. },
  229. data: function() {
  230. return {
  231. activeName: 'first',
  232. dock_id: '',
  233. // 下期直播
  234. nextData: [],
  235. nextTotal: 0,
  236. // 申请参加对接会
  237. dialogFormVisible: false,
  238. // 需求
  239. demandForm: {
  240. type: '0',
  241. },
  242. demandFormrules: {
  243. // name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
  244. // totaltype: [{ required: true, message: '请输入名称', trigger: 'change' }],
  245. // contact_user: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
  246. // contact_tel: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
  247. },
  248. // 技术
  249. productForm: {},
  250. // 产品列表
  251. goodsLists: [],
  252. // 字典表
  253. // 所属领域
  254. fieldList: [],
  255. // 成果状态
  256. achievestatusList: [],
  257. // 合作方式
  258. cooperationList: [],
  259. };
  260. },
  261. created() {
  262. this.search();
  263. this.maarkettype();
  264. },
  265. methods: {
  266. ...dock(['query', 'delete', 'update']),
  267. ...place({ palcequery: 'query', palcefetch: 'fetch' }),
  268. ...apply({ applyupdate: 'update', applyCreate: 'create' }),
  269. ...mapMarkettype({ markettypeList: 'query' }),
  270. ...mapProduct({ mapProductQuery: 'query', mapProductFetch: 'fetch' }),
  271. // 查询对接会
  272. async search({ skip = 0, limit = 0 } = { skip: 0, limit: 0 }) {
  273. let res = await this.query({ skip, limit, status: '0' });
  274. for (const val of res.data) {
  275. let parent = val.province;
  276. let places = val.place;
  277. let reslte = await this.palcequery({ level: 1, parent });
  278. let resltes = await this.palcequery({ level: 2, parent });
  279. var arr = reslte.data.filter(item => item.code === parent);
  280. var cre = resltes.data.filter(item => item.code === places);
  281. for (const shi of cre) {
  282. val.shi = shi.name;
  283. }
  284. for (const sheng of arr) {
  285. val.sheng = sheng.name;
  286. }
  287. }
  288. this.$set(this, `nextData`, res.data);
  289. this.$set(this, `nextTotal`, res.total);
  290. },
  291. // 申请对接会
  292. handleEdit(id) {
  293. this.dialogFormVisible = true;
  294. this.$set(this, `dock_id`, id);
  295. },
  296. // 需求提交
  297. async submitForm() {
  298. let data = {};
  299. data.user_id = this.user.uid;
  300. data.user_name = this.user.name;
  301. data.contact_tel = this.user.phone;
  302. data.role = this.user.role;
  303. let goods = [];
  304. goods.push(this.demandForm);
  305. data.goodsList = goods;
  306. const res = await this.applyCreate({ id: this.dock_id, ...data });
  307. if (res.errcode === 0) {
  308. this.$message({
  309. message: '申请参加对接会成功',
  310. type: 'success',
  311. });
  312. this.resetForm();
  313. }
  314. },
  315. // 產品提交
  316. async submitproductForm() {
  317. let data = this.productForm;
  318. data.user_id = this.user.uid;
  319. data.user_name = this.user.name;
  320. data.contact_tel = this.user.phone;
  321. data.role = this.user.role;
  322. const res = await this.applyCreate({ id: this.dock_id, ...data });
  323. if (res.errcode === 0) {
  324. this.$message({
  325. message: '申请参加对接会成功',
  326. type: 'success',
  327. });
  328. this.resetForm();
  329. }
  330. },
  331. // 取消
  332. resetForm() {
  333. this.demandForm = {
  334. totaltype: '0',
  335. };
  336. this.productForm = {};
  337. this.dialogFormVisible = false;
  338. this.search();
  339. },
  340. // 关闭申请
  341. handleClose(done) {
  342. this.resetForm();
  343. done();
  344. },
  345. // 查询类型
  346. async maarkettype({ ...info } = {}) {
  347. // 所属领域;
  348. let res = await this.markettypeList({ category: '01' });
  349. if (this.$checkRes(res)) {
  350. this.$set(this, `fieldList`, res.data);
  351. }
  352. // 成果状态;
  353. res = await this.markettypeList({ category: '02' });
  354. if (this.$checkRes(res)) {
  355. this.$set(this, `achievestatusList`, res.data);
  356. }
  357. // 合作方式;
  358. res = await this.markettypeList({ category: '03' });
  359. if (this.$checkRes(res)) {
  360. this.$set(this, `cooperationList`, res.data);
  361. }
  362. res = await this.mapProductQuery({ userid: this.user.uid });
  363. if (this.$checkRes(res)) {
  364. this.$set(this, `goodsLists`, res.data);
  365. }
  366. },
  367. // 图片
  368. uploadSuccess({ type, data }) {
  369. let arr = _.get(this.demandForm, type);
  370. if (_.isArray(arr)) {
  371. let datas = { name: data.name, url: data.uri };
  372. this.demandForm[type].push({ name: data.name, url: data.uri });
  373. } else {
  374. let newArr = [{ name: data.name, url: data.uri }];
  375. this.$set(this.demandForm, `${type}`, newArr);
  376. }
  377. },
  378. // 删除图片
  379. uploadDelete(index) {
  380. this.form.image.splice(index, 1);
  381. },
  382. },
  383. computed: {
  384. ...mapState(['user']),
  385. pageTitle() {
  386. return `${this.$route.meta.title}`;
  387. },
  388. },
  389. metaInfo() {
  390. return { title: this.$route.meta.title };
  391. },
  392. };
  393. </script>
  394. <style lang="less" scoped></style>