customerReviewedParamForm.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <el-dialog
  3. title="客户无需审批信息维护"
  4. :visible.sync="visible"
  5. width="500px"
  6. @close="handleClose"
  7. append-to-body
  8. :close-on-click-modal="false"
  9. >
  10. <el-form
  11. ref="formRef"
  12. :model="form"
  13. :rules="rules"
  14. label-width="100px"
  15. size="small"
  16. >
  17. <el-form-item label="客户分类" prop="corpsTypeId" required>
  18. <el-select v-model="form.corpsTypeId" placeholder="请选择客户分类" style="width: 100%">
  19. <el-option
  20. v-for="item in corpsTypeOptions"
  21. :key="item.value"
  22. :label="item.title"
  23. :value="item.value"
  24. />
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item label="价格类型" prop="priceType" required>
  28. <el-select v-model="form.priceType" placeholder="请选择价格类型" style="width: 100%">
  29. <el-option
  30. v-for="item in priceTypeOptions"
  31. :key="item.value"
  32. :label="item.label"
  33. :value="item.value"
  34. />
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item label="仓库" prop="warehouseId" required>
  38. <el-select
  39. v-model="form.warehouseId"
  40. filterable
  41. reserve-keyword
  42. placeholder="请输入仓库名称搜索"
  43. :loading="warehouseLoading"
  44. style="width: 100%"
  45. @change="handleWarehouseChange"
  46. >
  47. <el-option
  48. v-for="item in warehouseOptions"
  49. :key="item.id"
  50. :label="item.name"
  51. :value="item.id"
  52. />
  53. </el-select>
  54. </el-form-item>
  55. <el-form-item label="业务员" prop="salesMan" required>
  56. <el-select
  57. v-model="form.salesMan"
  58. filterable
  59. reserve-keyword
  60. placeholder="请输入业务员姓名搜索"
  61. :loading="salesmanLoading"
  62. style="width: 100%"
  63. @change="handleSalesmanChange"
  64. >
  65. <el-option
  66. v-for="item in salesmanOptions"
  67. :key="item.id"
  68. :label="item.name"
  69. :value="item.id"
  70. />
  71. </el-select>
  72. </el-form-item>
  73. <!-- 启用开关 -->
  74. <el-form-item label="是否启用">
  75. <el-switch
  76. v-model="form.enabled"
  77. active-text="启用"
  78. inactive-text="禁用"
  79. :active-value="true"
  80. :inactive-value="false"
  81. />
  82. </el-form-item>
  83. </el-form>
  84. <span slot="footer" class="dialog-footer">
  85. <el-button size="small" @click="visible = false">取消</el-button>
  86. <el-button type="primary" size="small" @click="handleSubmit" :loading="submitting">确定</el-button>
  87. </span>
  88. </el-dialog>
  89. </template>
  90. <script>
  91. import {
  92. getCustomerReviewedParam,
  93. submitCustomerReviewedParam,
  94. getWarehouseList,
  95. getPriceList,
  96. getSalesUserList,
  97. getCorpType
  98. } from "../../../../api/tirePartsMall/basicData/customerInformation/customerReviewed";
  99. export default {
  100. name: "CustomerReviewedParamForm",
  101. data() {
  102. return {
  103. visible: false,
  104. submitting: false,
  105. // 表单数据
  106. form: {
  107. priceType: "",
  108. corpsTypeId: null,
  109. warehouseId: null,
  110. warehouseName: "",
  111. salesMan: null,
  112. salesManName: "",
  113. enabled: true // true 表示启用,false 表示禁用
  114. },
  115. // 校验规则
  116. rules: {
  117. corpsTypeId: [{ required: true, message: "请选择客户分类", trigger: "change" }],
  118. priceType: [{ required: true, message: "请选择价格类型", trigger: "change" }],
  119. warehouseId: [{ required: true, message: "请选择仓库", trigger: "change" }],
  120. salesMan: [{ required: true, message: "请选择业务员", trigger: "change" }]
  121. },
  122. // 下拉选项
  123. priceTypeOptions: [
  124. { value: "FIXED", label: "固定价" },
  125. { value: "FLOAT", label: "浮动价" },
  126. { value: "NEGOTIATE", label: "议价" }
  127. // 可根据实际枚举扩展
  128. ],
  129. warehouseOptions: [],
  130. salesmanOptions: [],
  131. corpsTypeOptions: [],
  132. warehouseLoading: false,
  133. salesmanLoading: false
  134. };
  135. },
  136. created() {
  137. this.getPriceDataList();
  138. this.searchWarehouses();
  139. this.searchSalesmen();
  140. this.getCorpTypeDataList();
  141. },
  142. methods: {
  143. getCorpTypeDataList() {
  144. getCorpType({ corpType: "KH" }).then(res => {
  145. this.corpsTypeOptions = res.data.data;
  146. });
  147. },
  148. getDetail() {
  149. getCustomerReviewedParam().then(res => {
  150. this.open(res.data.data);
  151. });
  152. },
  153. // 打开弹窗并初始化数据
  154. open(data = {}) {
  155. this.visible = true;
  156. this.$nextTick(() => {
  157. this.$refs.formRef.resetFields();
  158. this.form = {
  159. id: data.id || "",
  160. priceType: data.priceType || "",
  161. corpsTypeId: data.corpsTypeId || null,
  162. warehouseId: data.warehouseId || null,
  163. warehouseName: data.warehouseName || "",
  164. salesMan: data.salesMan || null,
  165. salesManName: data.salesManName || "",
  166. version: data.version || "",
  167. enabled: data.isDeleted === 0
  168. };
  169. });
  170. },
  171. // 搜索仓库
  172. searchWarehouses() {
  173. this.warehouseLoading = true;
  174. getWarehouseList().then(res => {
  175. this.warehouseOptions = (res.data.data || []).map(item => ({
  176. id: item.id,
  177. name: item.cname
  178. }));
  179. })
  180. .finally(() => {
  181. this.warehouseLoading = false;
  182. });
  183. },
  184. getPriceDataList() {
  185. getPriceList().then(res => {
  186. this.priceTypeOptions = res.data.data.map(item => ({
  187. value: item.dictValue,
  188. label: item.dictKey
  189. }));
  190. });
  191. },
  192. // 仓库选择后更新名称(可选,用于展示)
  193. handleWarehouseChange(val) {
  194. const selected = this.warehouseOptions.find(w => w.id === val);
  195. this.form.warehouseName = selected ? selected.name : "";
  196. },
  197. // 搜索业务员
  198. searchSalesmen() {
  199. this.salesmanLoading = true;
  200. getSalesUserList().then(res => {
  201. this.salesmanOptions = (res.data.data || []).map(user => ({
  202. id: user.id,
  203. name: user.name
  204. }));
  205. })
  206. .finally(() => {
  207. this.salesmanLoading = false;
  208. });
  209. },
  210. // 业务员选择后更新名称
  211. handleSalesmanChange(val) {
  212. const selected = this.salesmanOptions.find(u => u.id === val);
  213. this.form.salesManName = selected ? selected.name : "";
  214. },
  215. // 提交
  216. handleSubmit() {
  217. this.$refs.formRef.validate(valid => {
  218. if (!valid) return;
  219. this.submitting = true;
  220. const submitData = {
  221. id: this.form.id,
  222. priceType: this.form.priceType,
  223. corpsTypeId: this.form.corpsTypeId,
  224. warehouseId: this.form.warehouseId,
  225. warehouseName: this.form.warehouseName,
  226. salesMan: this.form.salesMan,
  227. salesManName: this.form.salesManName,
  228. version: this.form.version,
  229. isDeleted: this.form.enabled ? 0 : 1
  230. };
  231. submitCustomerReviewedParam(submitData).then(res => {
  232. this.$message.success("保存成功");
  233. this.submitting = false;
  234. this.visible = false;
  235. }).finally(() => {
  236. this.submitting = false;
  237. });
  238. });
  239. },
  240. // 关闭时重置
  241. handleClose() {
  242. this.$emit("close");
  243. }
  244. }
  245. };
  246. </script>
  247. <style scoped>
  248. /* 可选样式 */
  249. .dialog-footer {
  250. text-align: right;
  251. }
  252. </style>