addPurchase.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <template>
  2. <div v-loading="loading">
  3. <div class="form-box">
  4. <el-form
  5. label-position="top"
  6. :model="form"
  7. ref="form"
  8. :rules="formRules"
  9. label-width="100px"
  10. >
  11. <el-row>
  12. <el-col :span="8">
  13. <el-form-item
  14. :label="$t('purchase_management.purchase.selectSupply')"
  15. prop="supplieId"
  16. >
  17. <el-select
  18. v-model="form.supplieId"
  19. :placeholder="$t('pleaseSelect')"
  20. style="width: 100%"
  21. >
  22. <el-option
  23. v-for="item in supplySelectList"
  24. :key="item.id"
  25. :label="item.name"
  26. :value="item.id"
  27. >
  28. <span style="float: left">{{
  29. `${item.name}(${dictDataEcho(item.type, supplyTypeList)})`
  30. }}</span>
  31. </el-option>
  32. </el-select>
  33. </el-form-item>
  34. </el-col>
  35. </el-row>
  36. <!-- <el-row>
  37. <el-col :span="8">
  38. <el-form-item
  39. :label="$t('purchase_management.purchase.askArrivalTime')"
  40. prop="planArrivalTime"
  41. >
  42. <el-date-picker
  43. v-model="form.planArrivalTime"
  44. type="datetime"
  45. :placeholder="$t('pleaseSelect')"
  46. value-format="yyyy-MM-dd HH:mm:ss"
  47. style="width: 100%"
  48. >
  49. </el-date-picker>
  50. </el-form-item>
  51. </el-col>
  52. </el-row> -->
  53. <el-row>
  54. <el-col :span="12">
  55. <el-form-item
  56. :label="$t('purchase_management.purchase.remarks')"
  57. prop="flowRemark"
  58. >
  59. <el-input
  60. v-model="form.flowRemark"
  61. :placeholder="$t('pleaseInput')"
  62. type="textarea"
  63. rows="4"
  64. ></el-input>
  65. </el-form-item>
  66. </el-col>
  67. </el-row>
  68. <div style="margin-bottom: 20px">
  69. <labelTitle
  70. :content="$t('purchase_management.purchase.subscribeDetails')"
  71. ></labelTitle>
  72. </div>
  73. <el-form-item>
  74. <el-table :data="form.goodsList">
  75. <el-table-column
  76. :label="$t('purchase_management.purchase.goodCode')"
  77. prop="goodsCode"
  78. >
  79. </el-table-column>
  80. <el-table-column
  81. :label="$t('purchase_management.purchase.goodName')"
  82. prop="goodsName"
  83. >
  84. </el-table-column>
  85. <el-table-column
  86. :label="$t('purchase_management.purchase.goodType')"
  87. prop="goodType"
  88. :formatter="(row) => dictDataEcho(row.goodsType, productTypeList)"
  89. >
  90. </el-table-column>
  91. <el-table-column
  92. :label="$t('purchase_management.purchase.unit')"
  93. prop="goodsUnit"
  94. >
  95. </el-table-column>
  96. <!-- <el-table-column
  97. :label="$t('purchase_management.purchase.subscribeQuantity')"
  98. prop="quantity"
  99. >
  100. </el-table-column> -->
  101. <el-table-column label="采购数量" prop="quantity">
  102. </el-table-column>
  103. <el-table-column
  104. :label="$t('purchase_management.purchase.price')"
  105. prop="price"
  106. >
  107. <template slot-scope="scope">
  108. <el-form-item
  109. :prop="'goodsList.' + scope.$index + '.price'"
  110. :rules="formRules.price"
  111. :inline-message="true"
  112. label-width="0"
  113. >
  114. <el-input
  115. v-model="scope.row.unitPrice"
  116. :placeholder="$t('pleaseInput')"
  117. size="mini"
  118. >
  119. </el-input>
  120. </el-form-item>
  121. </template>
  122. </el-table-column>
  123. <el-table-column label="小计" prop="stockQuantity">
  124. </el-table-column>
  125. <el-table-column
  126. :label="$t('operation')"
  127. width="100"
  128. align="center"
  129. >
  130. <template slot-scope="scope">
  131. <el-button type="text" @click="deleteRow(scope.$index)">{{
  132. $t("delete")
  133. }}</el-button>
  134. </template>
  135. </el-table-column>
  136. </el-table>
  137. </el-form-item>
  138. </el-form>
  139. </div>
  140. <div style="text-align: center; margin-top: 15px">
  141. <el-button size="small" @click="handleCancel"
  142. >{{ $t("cancel") }}
  143. </el-button>
  144. <el-button type="primary" size="small" @click="handleSubmit">
  145. {{ $t("submit") }}</el-button
  146. >
  147. </div>
  148. </div>
  149. </template>
  150. <script>
  151. import labelTitle from "@/components/label-title/index.vue";
  152. import { getToken } from "@/util/auth";
  153. export default {
  154. name: "addPurchase",
  155. components: { labelTitle },
  156. props: {
  157. form: {
  158. type: Object,
  159. default: () => {},
  160. },
  161. supplySelectList: {
  162. type: Array,
  163. default: () => [],
  164. },
  165. supplyTypeList: {
  166. type: Array,
  167. default: () => [],
  168. },
  169. productTypeList: {
  170. type: Array,
  171. default: () => [],
  172. },
  173. },
  174. data() {
  175. return {
  176. uploadHeader: {
  177. Authorization: "Basic c2FiZXI6c2FiZXJfc2VjcmV0",
  178. "Blade-Auth": "bearer " + getToken(),
  179. },
  180. loading: false,
  181. formRules: {
  182. supplieId: [
  183. {
  184. required: true,
  185. message:
  186. this.$t("pleaseSelect") +
  187. this.$t("purchase_management.purchase.selectSupply"),
  188. trigger: "change",
  189. },
  190. ],
  191. planArrivalTime: [
  192. {
  193. required: true,
  194. message:
  195. this.$t("pleaseSelect") +
  196. this.$t("purchase_management.purchase.askArrivalTime"),
  197. trigger: "change",
  198. },
  199. ],
  200. countryId: [
  201. {
  202. required: true,
  203. message:
  204. this.$t("pleaseSelect") +
  205. this.$t("purchase_management.purchase.country"),
  206. trigger: "change",
  207. },
  208. ],
  209. provinceId: [
  210. {
  211. required: true,
  212. message:
  213. this.$t("pleaseSelect") +
  214. this.$t("purchase_management.purchase.province"),
  215. trigger: "change",
  216. },
  217. ],
  218. cityId: [
  219. {
  220. required: true,
  221. message:
  222. this.$t("pleaseSelect") +
  223. this.$t("purchase_management.purchase.city"),
  224. trigger: "change",
  225. },
  226. ],
  227. type: [
  228. {
  229. required: true,
  230. message:
  231. this.$t("pleaseSelect") +
  232. this.$t("purchase_management.purchase.purchaseType"),
  233. trigger: "change",
  234. },
  235. ],
  236. name: [
  237. {
  238. required: true,
  239. message:
  240. this.$t("pleaseInput") +
  241. this.$t("purchase_management.purchase.purchaseName"),
  242. trigger: "blur",
  243. },
  244. ],
  245. contacts: [
  246. {
  247. required: true,
  248. message:
  249. this.$t("pleaseInput") +
  250. this.$t("purchase_management.purchase.contacts"),
  251. trigger: "blur",
  252. },
  253. ],
  254. phone: [
  255. {
  256. required: true,
  257. message:
  258. this.$t("pleaseInput") +
  259. this.$t("purchase_management.purchase.contactNumber"),
  260. trigger: "blur",
  261. },
  262. ],
  263. },
  264. };
  265. },
  266. created() {},
  267. methods: {
  268. handleSubmit() {
  269. this.$refs.form.validate((valid) => {
  270. if (valid) {
  271. this.loading = true;
  272. this.$emit("submit");
  273. }
  274. });
  275. },
  276. handleCancel() {
  277. this.$emit("cancel");
  278. },
  279. },
  280. };
  281. </script>
  282. <style lang="scss" scoped>
  283. .form-box {
  284. height: calc(100vh - 280px);
  285. overflow: auto;
  286. box-sizing: border-box;
  287. padding: 10px;
  288. }
  289. ::v-deep {
  290. .el-form-item {
  291. margin-bottom: 3px;
  292. }
  293. .el-form--label-top .el-form-item__label {
  294. padding: 8px 0 0 0;
  295. }
  296. }
  297. </style>