company-add.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <div class="content" v-show="showDialog">
  3. <el-dialog title="企业反馈" top="30vh" :visible.sync="showDialog" width="700px" @closed="onClosed">
  4. <el-form inline ref="form" :model="info" label-width="100px" :rules="rules">
  5. <el-form-item label="产业链:" prop="category_id">
  6. <!-- 产业链 -->
  7. <el-cascader ref="chain" v-model="info.category_id" :options="category" :props="{ expandTrigger: 'hover', value: 'id', label: 'title',emitPath: false }"
  8. @change="handleChainChange"></el-cascader>
  9. </el-form-item>
  10. <el-form-item label="数据类型:" prop="module">
  11. <el-select v-model="info.module" placeholder="请选择">
  12. <el-option v-for="item in moduleList" :key="item.name" :label="item.title" :value="item.name">
  13. </el-option>
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="企业名称:" prop="title">
  17. <el-input placeholder="请输入" v-model="info.title"></el-input>
  18. </el-form-item>
  19. <el-form-item label="联系人:" prop="principal">
  20. <el-input placeholder="请输入" v-model="info.principal"></el-input>
  21. </el-form-item>
  22. <el-form-item label="联系电话:" prop="tel">
  23. <el-input placeholder="请输入" v-model="info.tel"></el-input>
  24. </el-form-item>
  25. <el-form-item label="企业地址:" prop="address">
  26. <el-input type="textarea" placeholder="请输入" v-model="info.address" :rows="2" resize="none"></el-input>
  27. </el-form-item>
  28. <el-form-item label="企业简介:" prop="intro">
  29. <el-input type="textarea" placeholder="请输入" v-model="info.intro" :rows="3" resize="none">
  30. </el-input>
  31. </el-form-item>
  32. </el-form>
  33. <div slot="footer" class="dialog-footer">
  34. <el-button type="primary" @click="submitForm">提交</el-button>
  35. <el-button @click="showDialog = false">取消</el-button>
  36. </div>
  37. </el-dialog>
  38. </div>
  39. </template>
  40. <script>
  41. import {
  42. mapState
  43. } from 'vuex'
  44. export default {
  45. components: {},
  46. props: {
  47. value: {
  48. type: Boolean,
  49. default: false,
  50. },
  51. },
  52. data() {
  53. return {
  54. showDialog: false,
  55. info: {
  56. category_id: null,
  57. title: '',
  58. tel: '',
  59. address: '',
  60. chain: '',
  61. module: '',
  62. intro: '',
  63. principal: '',
  64. },
  65. showModule: false,
  66. moduleList: [],
  67. moduleTitle: '',
  68. moduleSelect: [0],
  69. rules: {
  70. category_id: [{
  71. required: true,
  72. message: "请选择产业链",
  73. trigger: "change",
  74. }, ],
  75. title: [{
  76. required: true,
  77. message: "请输入企业名称",
  78. trigger: "change",
  79. }, ],
  80. address: [{
  81. required: true,
  82. message: "请输入企业地址",
  83. trigger: "change",
  84. }, ],
  85. tel: [{
  86. required: true,
  87. message: "请输入联系电话",
  88. trigger: "change",
  89. }, ],
  90. intro: [{
  91. required: true,
  92. message: "请输入企业简介",
  93. trigger: "change",
  94. }, ],
  95. principal: [{
  96. required: true,
  97. message: "请输入联系人",
  98. trigger: "change",
  99. }, ],
  100. },
  101. };
  102. },
  103. created() {
  104. this.getModuleListFun()
  105. },
  106. methods: {
  107. onClosed() {
  108. this.$refs.form.resetFields();
  109. },
  110. handleChainChange(value) {
  111. let node = this.$refs.chain.getCheckedNodes(true)
  112. this.info.chain = node[0].label;
  113. },
  114. // 获取
  115. async getModuleListFun() {
  116. const {
  117. code,
  118. data
  119. } = await this.$get('/article/module',{})
  120. if (code == 1) {
  121. this.moduleList = data
  122. this.info.module = this.moduleList[0].name;
  123. }
  124. },
  125. submitForm() {
  126. this.$refs.form.validate(async (valid) => {
  127. if (valid) {
  128. const {
  129. status,
  130. data,
  131. msg
  132. } = await this.$post('/article', this.info);
  133. if (status == 1) {
  134. this.$message.success(msg);
  135. this.showDialog = false;
  136. this.$emit("success");
  137. }
  138. } else {
  139. return false;
  140. }
  141. });
  142. },
  143. },
  144. watch: {
  145. value(val) {
  146. this.showDialog = val;
  147. },
  148. showDialog(val) {
  149. this.$emit('input', val)
  150. },
  151. },
  152. computed: {
  153. ...mapState(['category']),
  154. },
  155. };
  156. </script>
  157. <style lang="scss" scoped>
  158. .content {
  159. .el-cascader {
  160. width: 468px;
  161. }
  162. .el-textarea {
  163. width: 468px;
  164. }
  165. .dialog-footer {
  166. text-align: center;
  167. .el-button {
  168. width: 160px;
  169. }
  170. }
  171. margin: 24px;
  172. padding: 24px;
  173. box-shadow: 0px 8px 16px 2px rgba(0, 0, 0, 0.03);
  174. border-radius: 18px 18px 18px 18px;
  175. }
  176. </style>