work-form.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <div class="edit">
  3. <el-form ref="form" :rules="rules" :model="work" label-width="147px">
  4. <el-form-item label="作品名称" prop="name">
  5. <el-input
  6. :style="{width: '440px'}"
  7. v-model="work.name"
  8. placeholder="50字以内 不能包含 & ¥ % / \ *"
  9. ></el-input>
  10. <span class="opts">
  11. <el-button type="danger" @click="handleDelete(work, idx)">删除</el-button>
  12. <el-button type="info" @click="handleCancel(work, idx)">取消</el-button>
  13. <el-button type="primary" @click="handleSubmit(work, idx)">保存</el-button>
  14. <!-- <el-button type="text" icon="el-icon-delete" @click="handleDelete(idx)"></el-button> -->
  15. </span>
  16. </el-form-item>
  17. <div class="inline">
  18. <el-form-item label="行业类型" prop="industry_id">
  19. <!-- <el-select :style="{width: '217px'}" v-model="work.industry_id" placeholder="选择行业类型">
  20. <el-option
  21. v-for="item in industries"
  22. :label="`${item.label}`"
  23. :key="item.value"
  24. :value="item.value"
  25. ></el-option>
  26. </el-select>-->
  27. <el-cascader
  28. :style="{width: '217px'}"
  29. placeholder="选择行业类型"
  30. v-model="work.industry_id"
  31. @change="industryChange"
  32. :options="industries"
  33. :props="{ expandTrigger: 'hover' }"
  34. ></el-cascader>
  35. </el-form-item>
  36. <el-form-item label="关键功能" prop="function_ops">
  37. <el-select
  38. :style="{width: '217px'}"
  39. multiple
  40. v-model="work.function_ops"
  41. placeholder="请选择"
  42. >
  43. <el-option
  44. v-for="item in functions"
  45. :label="`${item.label}`"
  46. :key="item.value"
  47. :value="item.value"
  48. ></el-option>
  49. </el-select>
  50. </el-form-item>
  51. </div>
  52. <el-form-item label="作品描述" prop="description">
  53. <el-input
  54. type="textarea"
  55. :rows="5"
  56. placeholder="请输入60~200字的作品描述"
  57. v-model="work.description"
  58. ></el-input>
  59. </el-form-item>
  60. <el-form-item label="作品职责" prop="duty">
  61. <el-input
  62. type="textarea"
  63. :rows="4"
  64. placeholder="描述你在该作品中承担的责任,完成了哪些工作(不少于15字符)"
  65. v-model="work.duty"
  66. ></el-input>
  67. </el-form-item>
  68. <el-form-item label="作品地址" prop="url">
  69. <el-input placeholder="例如:https://www.proginn.com 若无法添加作品有效链接,请添加作品截图" v-model="work.url"></el-input>
  70. </el-form-item>
  71. <el-form-item label="作品截图" prop="image_list">
  72. <multi-uploader v-model="work.image_list"></multi-uploader>
  73. </el-form-item>
  74. </el-form>
  75. </div>
  76. </template>
  77. <script>
  78. import multiUploader from "@/components/multi-uploader";
  79. export default {
  80. props: [
  81. "idx",
  82. "industries",
  83. "functions",
  84. "work",
  85. "handleDelete",
  86. "handleCancel",
  87. "onSubmit"
  88. ],
  89. components: {
  90. multiUploader
  91. },
  92. data() {
  93. return {
  94. rules: {
  95. name: [
  96. {
  97. required: true,
  98. message: "作品名称不得为空",
  99. trigger: "blur"
  100. },
  101. { max: 50, message: "作品名称不得超过50字符", trigger: "blur" },
  102. {
  103. validator: (rule, value, callback) => {
  104. if (/[&¥%\/\*]+/.test(value)) {
  105. callback(new Error("作品名称不包含特殊字符"));
  106. } else {
  107. callback();
  108. }
  109. },
  110. trigger: "blur"
  111. }
  112. ],
  113. description: [
  114. {
  115. required: true,
  116. message: "作品简介不得为空",
  117. trigger: "blur"
  118. },
  119. { min: 60, message: "作品简介不得低于60字符", trigger: "blur" },
  120. { max: 200, message: "作品简介不得高于200字符", trigger: "blur" }
  121. ],
  122. industry_id: [
  123. {
  124. required: true,
  125. message: "行业类型不得为空",
  126. trigger: "blur"
  127. }
  128. ],
  129. function_ops: [
  130. {
  131. required: true,
  132. message: "关键功能不得为空",
  133. trigger: "blur"
  134. }
  135. ],
  136. duty: [
  137. {
  138. required: true,
  139. message: "作品职责不得为空",
  140. trigger: "blur"
  141. },
  142. { min: 15, message: "作品职责不得低于15字符", trigger: "blur" },
  143. { max: 200, message: "作品职责不得高于200字符", trigger: "blur" }
  144. ]
  145. }
  146. };
  147. },
  148. computed: {
  149. realname_verify_status() {
  150. return this.userInfo ? this.userInfo.realname_verify_status : "";
  151. }
  152. },
  153. async mounted() {
  154. // realname_verify_status, 1是待审核,2审核通过,3是拒绝
  155. this.userInfo = await this.getUserInfo();
  156. },
  157. methods: {
  158. async handleSubmit(idx) {
  159. this.$refs["form"].validate(async valid => {
  160. if (valid) {
  161. console.log("submit!", this.work);
  162. const work = this.work;
  163. this.onSubmit(this.work, idx);
  164. } else {
  165. console.log("error submit!!");
  166. return false;
  167. }
  168. });
  169. },
  170. handleImageUrl(idx, url) {
  171. this.work.diploma_photo = url;
  172. },
  173. industryChange(value) {
  174. console.log(value);
  175. }
  176. }
  177. };
  178. </script>
  179. <style lang="scss" scoped>
  180. .edit {
  181. padding: 20px;
  182. > form {
  183. .opts {
  184. display: flex;
  185. align-items: center;
  186. float: right;
  187. .el-button {
  188. margin-left: 5px;
  189. }
  190. }
  191. .inline {
  192. display: flex;
  193. }
  194. .to {
  195. margin-right: 10px;
  196. }
  197. .times {
  198. .el-checkbox {
  199. width: 88px;
  200. }
  201. .el-input {
  202. width: 136px;
  203. }
  204. }
  205. .content {
  206. display: flex;
  207. justify-content: space-between;
  208. align-items: flex-start;
  209. margin-top: 10px;
  210. .el-textarea {
  211. display: flex;
  212. width: 766px;
  213. height: 162px;
  214. }
  215. }
  216. }
  217. }
  218. </style>