Bid.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <div>
  3. <!-- 新增招标记录弹窗 -->
  4. <el-dialog append-to-body :title="title" :visible.sync="visible" @close="close">
  5. <el-form ref="form" :model="form" :rules="rules">
  6. <el-row :gutter="20">
  7. <el-col :span="12">
  8. <el-form-item label="招标产品名称" prop="productName">
  9. <el-input v-model="form.productName" placeholder="请输入招标产品名称" />
  10. </el-form-item>
  11. </el-col>
  12. <el-col :span="12">
  13. <el-form-item label="关联客户" prop="cuctName">
  14. <el-input
  15. v-model="form.cuctName"
  16. :disabled="form.id != 0"
  17. readonly
  18. suffix-icon="el-icon-search"
  19. @focus="handleSelectCustomer" />
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="12">
  23. <el-form-item label="发布日期" prop="publishedTime">
  24. <el-date-picker
  25. v-model="form.publishedTime"
  26. format="yyyy-MM-dd HH:mm"
  27. placeholder="请选择发布日期"
  28. style="width: 100%"
  29. type="datetime"
  30. value-format="yyyy-MM-dd HH:mm" />
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="12">
  34. <el-form-item label="预算" prop="budget">
  35. <el-input v-model.number="form.budget" clearable placeholder="请输入预算" />
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="12">
  39. <el-form-item label="招标信息标题" prop="title">
  40. <el-input v-model="form.title" placeholder="请输入招标信息标题" />
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="12">
  44. <el-form-item label="信息分类" prop="infoType">
  45. <el-select v-model="form.infoType" placeholder="请选择信息分类" style="width: 100%">
  46. <el-option v-for="item in bidInfoTypeOptions" :key="item.value" :label="item.value" :value="item.key" />
  47. </el-select>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="中标单位" prop="bidder">
  52. <el-input v-model="form.bidder" placeholder="请输入中标单位" />
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item label="产品线" prop="productLine">
  57. <el-select v-model="form.productLine" placeholder="请选择" style="width: 100%">
  58. <el-option v-for="item in productLineOptions" :key="item.key" :label="item.value" :value="item.key" />
  59. </el-select>
  60. </el-form-item>
  61. </el-col>
  62. <el-col :span="12">
  63. <el-form-item label="创建时间" prop="biddingTime">
  64. <el-date-picker
  65. v-model="form.biddingTime"
  66. format="yyyy-MM-dd HH:mm"
  67. placeholder="请选择创建时间"
  68. style="width: 100%"
  69. type="datetime"
  70. value-format="yyyy-MM-dd HH:mm" />
  71. </el-form-item>
  72. <!-- <el-input v-model="form.bidder" placeholder="请输入中标单位" /> -->
  73. </el-col>
  74. </el-row>
  75. <el-form-item label="备注" prop="remark">
  76. <el-input
  77. v-model="form.remark"
  78. maxlength="500"
  79. placeholder="请输入备注"
  80. resize="none"
  81. :rows="5"
  82. show-word-limit
  83. type="textarea" />
  84. </el-form-item>
  85. </el-form>
  86. <span slot="footer">
  87. <el-button v-show="form.id" type="primary" @click="bidEdit">保存</el-button>
  88. <el-button v-show="!form.id" type="primary" @click="bidSave">保存</el-button>
  89. <el-button @click="visible = false">取消</el-button>
  90. </span>
  91. </el-dialog>
  92. <!-- 选择客户弹窗 -->
  93. <select-customer ref="selectCustomer" @save="selectCustomer" />
  94. </div>
  95. </template>
  96. <script>
  97. import to from 'await-to-js'
  98. import bidApi from '@/api/customer/bid'
  99. import SelectCustomer from '@/components/select/SelectCustomer'
  100. export default {
  101. components: { SelectCustomer },
  102. data() {
  103. return {
  104. title: '新增招标记录',
  105. visible: false,
  106. bidInfoTypeOptions: [],
  107. productLineOptions: [],
  108. form: {
  109. id: 0,
  110. custId: '', // 关联客户
  111. cuctName: '', // 客户名称
  112. productName: '', // 招标产品名称
  113. publishedTime: '', // 发布日期
  114. budget: 0, // 预算
  115. productLine: '', // 产品线
  116. title: '', // 招标信息标题
  117. infoType: '', // 信息分类
  118. bidder: '', // 中标单位
  119. biddingTime: '', //招标创建时间
  120. remark: '', // 备注
  121. },
  122. rules: {
  123. cuctName: [{ required: true, trigger: ['blur', 'change'], message: '请选择关联客户' }],
  124. productName: [{ required: true, trigger: ['blur', 'change'], message: '请输入招标产品名称' }],
  125. publishedTime: [{ required: true, trigger: ['blur', 'change'], message: '请输入发布招标日期' }],
  126. budget: [{ required: true, trigger: ['blur', 'change'], message: '请输入预算' }],
  127. productLine: [{ required: true, trigger: ['blur', 'change'], message: '请选择产品线' }],
  128. title: [{ required: true, trigger: ['blur', 'change'], message: '请输入招标信息标题' }],
  129. infoType: [{ required: true, trigger: ['blur', 'change'], message: '请输入信息分类' }],
  130. bidder: [{ trigger: ['blur', 'change'], message: '请输入中标单位' }],
  131. biddingTime: [{ required: true, trigger: ['blur', 'change'], message: '请输入创建日期' }],
  132. },
  133. }
  134. },
  135. methods: {
  136. async init(id) {
  137. this.visible = true
  138. this.getDicts('bid_info_type').then((response) => {
  139. this.bidInfoTypeOptions = response.data.values || []
  140. })
  141. this.getDicts('sys_product_line').then((response) => {
  142. this.productLineOptions = response.data.values || []
  143. })
  144. if (!id) {
  145. this.title = '新建招标信息'
  146. return
  147. }
  148. this.title = '编辑招标信息'
  149. const [err, res] = await to(bidApi.get({ id: id }))
  150. if (err) return
  151. this.form = res.data
  152. },
  153. // 选中客户
  154. selectCustomer(val) {
  155. this.form.custId = val[0].id
  156. this.form.cuctName = val.map((item) => item.custName).join()
  157. },
  158. // 选择客户
  159. handleSelectCustomer() {
  160. this.$refs.selectCustomer.open()
  161. },
  162. // 保存
  163. async bidSave() {
  164. this.$refs.form.validate(async (valid) => {
  165. if (valid) {
  166. let params = { ...this.form }
  167. this.bidInfoTypeOptions.forEach((i) => {
  168. if (params.infoType == i.value) {
  169. params.infoType = i.key
  170. }
  171. })
  172. const [err, res] = await to(bidApi.add(params))
  173. if (err) return
  174. this.$message.success(res.msg)
  175. this.visible = false
  176. this.$emit('bidSave')
  177. }
  178. })
  179. },
  180. async bidEdit() {
  181. this.$refs.form.validate(async (valid) => {
  182. if (valid) {
  183. let params = { ...this.form }
  184. this.bidInfoTypeOptions.forEach((i) => {
  185. if (params.infoType == i.value) {
  186. params.infoType = i.key
  187. }
  188. })
  189. const [err, res] = await to(bidApi.update(params))
  190. if (err) return
  191. this.$message.success(res.msg)
  192. this.visible = false
  193. this.$emit('bidSave')
  194. }
  195. })
  196. },
  197. close() {
  198. this.form = {
  199. id: 0,
  200. custId: '', // 关联客户
  201. cuctName: '', // 客户名称
  202. productName: '', // 招标产品名称
  203. publishedTime: '', // 发布日期
  204. budget: 0, // 预算
  205. productLine: '', // 产品线
  206. title: '', // 招标信息标题
  207. infoType: '', // 信息分类
  208. bidder: '', // 中标单位
  209. remark: '', // 备注
  210. }
  211. this.$refs['form'].resetFields()
  212. },
  213. },
  214. }
  215. </script>
  216. <style></style>