order_apply.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <template>
  2. <div id="order_apply">
  3. <el-row>
  4. <el-col :span="24" class="main">
  5. <el-col :span="24" class="one">
  6. <el-col :span="24" class="top">
  7. <el-button type="primary" size="mini" @click="back">返回</el-button>
  8. </el-col>
  9. <el-col :span="24" class="down">
  10. <el-form :model="form" ref="form" label-width="100px" :rules="rules">
  11. <el-col :span="24" class="text">
  12. <el-form-item label="需求描述" prop="req_desc">
  13. <el-input v-model="form.req_desc" type="textarea" maxlength="300" :autosize="{ minRows: 4, maxRows: 6 }" show-word-limit></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="12" class="text">
  17. <el-form-item label="订单名称" prop="name">
  18. <el-input v-model="form.name"></el-input>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="12" class="text">
  22. <!-- mechanism_id是服务端要的 -->
  23. <el-form-item label="服务机构" prop="mechanism_name">
  24. <el-input v-model="form.mechanism_name" :disabled="true"></el-input>
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="12" class="text">
  28. <el-form-item label="联系人" prop="mechanism_person">
  29. <el-input v-model="form.mechanism_person"></el-input>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="12" class="text">
  33. <el-form-item label="联系电话" prop="mechanism_mobile">
  34. <el-input v-model="form.mechanism_mobile"></el-input>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="12" class="text">
  38. <!-- user_id是要的 -->
  39. <el-form-item label="需方机构名称" prop="user_name">
  40. <el-input v-model="form.user_name" :disabled="true"></el-input>
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="12" class="text">
  44. <el-form-item label="联系人" prop="person">
  45. <el-input v-model="form.person"></el-input>
  46. </el-form-item>
  47. </el-col>
  48. <el-col :span="12" class="text">
  49. <el-form-item label="联系电话" prop="phone">
  50. <el-input v-model="form.phone"></el-input>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="12" class="text">
  54. <el-form-item label="电子邮箱" prop="email">
  55. <el-input v-model="form.email"></el-input>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="24" class="text">
  59. <el-form-item label="订单总金额" prop="money">
  60. <el-input v-model.number="form.money" type="number" style="width: 98%"></el-input>
  61. <span style="padding: 0 5px">元</span>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="24" class="text">
  65. <el-form-item label="备注" prop="remark">
  66. <el-input v-model="form.remark" type="textarea" maxlength="300" :autosize="{ minRows: 4, maxRows: 6 }" show-word-limit></el-input>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="24" class="formBtn">
  70. <el-button type="danger" size="mini" @click="back">取消添加</el-button>
  71. <el-button type="primary" size="mini" @click="onSubmit('form')">提交保存</el-button>
  72. </el-col>
  73. </el-form>
  74. </el-col>
  75. </el-col>
  76. </el-col>
  77. </el-row>
  78. </div>
  79. </template>
  80. <script>
  81. const _ = require('lodash');
  82. import { mapState, createNamespacedHelpers } from 'vuex';
  83. const { mapActions: policyApply } = createNamespacedHelpers('policyApply');
  84. const { mapActions: policyOrder } = createNamespacedHelpers('policyOrder');
  85. export default {
  86. name: 'order_apply',
  87. props: {},
  88. components: {},
  89. data: function () {
  90. return {
  91. form: {},
  92. apply: {},
  93. rules: {
  94. req_desc: [{ required: true, message: '请填写需求描述', trigger: 'blur' }],
  95. name: [{ required: true, message: '请填写订单名称', trigger: 'blur' }],
  96. mechanism_person: [{ required: true, message: '请填写服务机构联系人', trigger: 'blur' }],
  97. mechanism_mobile: [{ required: true, message: '请填写服务机构联系电话', trigger: 'blur' }],
  98. person: [{ required: true, message: '请填写需方机构联系人', trigger: 'blur' }],
  99. phone: [{ required: true, message: '请填写需方机构联系电话', trigger: 'blur' }],
  100. email: [{ required: true, message: '请填写需方机构电子邮箱', trigger: 'blur' }],
  101. money: [
  102. { required: true, message: '请填写订单总金额', trigger: 'blur' },
  103. { type: 'number', message: '请填写订单总金额', trigger: 'blur' },
  104. ],
  105. remark: [{ required: true, message: '请填写备注', trigger: 'blur' }],
  106. },
  107. };
  108. },
  109. created() {
  110. this.getApply();
  111. },
  112. methods: {
  113. ...policyApply(['fetch']),
  114. ...policyOrder(['create']),
  115. async getApply() {
  116. const res = await this.fetch(this.id);
  117. if (this.$checkRes(res)) {
  118. this.$set(this, `apply`, res.data);
  119. // 整理数据
  120. const policy = _.get(res.data, 'policy', {});
  121. const user = _.get(policy, 'user', {});
  122. let obj = {};
  123. // 服务机构数据
  124. const uArr = [
  125. { key: '_id', prop: 'mechanism_id' },
  126. { key: 'deptname', prop: 'mechanism_person' },
  127. { key: 'phone', prop: 'mechanism_mobile' },
  128. { key: 'deptname', prop: 'mechanism_name' },
  129. ];
  130. obj = this.setObj(user, uArr);
  131. // 用户数据
  132. const aArr = [
  133. { key: '_id', prop: 'user_id' },
  134. { key: 'name', prop: 'user_name' },
  135. { key: 'companyperson', prop: 'person' },
  136. { key: 'phone', prop: 'phone' },
  137. { key: 'email', prop: 'email' },
  138. ];
  139. obj = { ...obj, ...this.setObj(this.user, aArr) };
  140. obj.apply_id = this.id;
  141. obj.policy_user_type = _.get(policy, 'use_type');
  142. obj.policy_id = _.get(policy, '_id');
  143. this.$set(this, 'form', obj);
  144. }
  145. },
  146. onSubmit(formName) {
  147. this.$refs[formName].validate((valid) => {
  148. if (valid) {
  149. this.toOrder();
  150. } else {
  151. console.log('error submit!!');
  152. return false;
  153. }
  154. });
  155. },
  156. async toOrder() {
  157. const dup = _.cloneDeep(this.form);
  158. const res = await this.create(dup);
  159. if (this.$checkRes(res, '订单创建成功', res.errmsg || '订单创建失败')) {
  160. this.back();
  161. }
  162. },
  163. back() {
  164. this.$router.push({ path: '/adminCenter/company/policyApply/index' });
  165. },
  166. setObj(object, list) {
  167. const obj = {};
  168. for (const i of list) {
  169. const { key, prop } = i;
  170. obj[prop] = object[key];
  171. }
  172. return obj;
  173. },
  174. },
  175. computed: {
  176. ...mapState(['user', 'menuParams']),
  177. pageTitle() {
  178. return `${this.$route.meta.title}`;
  179. },
  180. id() {
  181. return this.$route.query.id;
  182. },
  183. },
  184. metaInfo() {
  185. return { title: this.$route.meta.title };
  186. },
  187. };
  188. </script>
  189. <style lang="less" scoped>
  190. .main {
  191. border-radius: 10px;
  192. box-shadow: 0 0 5px #cccccc;
  193. padding: 20px;
  194. .one {
  195. .top {
  196. text-align: right;
  197. margin: 0 0 15px 0;
  198. }
  199. .down {
  200. .text {
  201. border-bottom: 1px dashed #333;
  202. }
  203. /deep/.el-form-item {
  204. padding: 20px 10px;
  205. margin: 0;
  206. }
  207. /deep/.el-input__inner {
  208. border: 1px solid #333;
  209. }
  210. .formBtn {
  211. text-align: center;
  212. padding: 15px 0;
  213. }
  214. }
  215. }
  216. }
  217. .main:hover {
  218. box-shadow: 0 0 5px #409eff;
  219. }
  220. </style>