| | |
| | | @click="showCustomerSheet = true"></up-icon> |
| | | </template> |
| | | </up-form-item> |
| | | <up-form-item label="所属项目" |
| | | prop="projectId"> |
| | | <FormPicker v-model="form.projectId" |
| | | :display-text="form.projectName" |
| | | type="select" |
| | | title="选择所属项目" |
| | | :options="projectOptions" |
| | | placeholder="请选择所属项目" |
| | | @change="onProjectChange" /> |
| | | </up-form-item> |
| | | <up-form-item label="业务员" |
| | | prop="salesperson" |
| | | required> |
| | |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import FooterButtons from "@/components/FooterButtons.vue"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import FormPicker from "@/components/FormPicker.vue"; |
| | | import { formatDateToYMD } from "@/utils/ruoyi"; |
| | | import { loadProjectOptions, pickProjectName } from "@/utils/projectOptions"; |
| | | import { modelList, productTreeList } from "@/api/basicData/product"; |
| | | import { userListNoPageByTenantId } from "@/api/system/user"; |
| | | import { |
| | |
| | | const salespersonList = ref([]); |
| | | const productList = ref([]); |
| | | const modelActions = ref([]); |
| | | const projectOptions = ref([]); |
| | | |
| | | let uidSeed = 1; |
| | | |
| | |
| | | quotationNo: "", |
| | | customerId: undefined, |
| | | customer: "", |
| | | projectId: "", |
| | | projectName: "", |
| | | salesperson: "", |
| | | quotationDate: "", |
| | | validDate: "", |
| | |
| | | ); |
| | | }; |
| | | |
| | | const onProjectChange = (value, item) => { |
| | | form.value.projectName = pickProjectName(item); |
| | | }; |
| | | |
| | | const loadProjectList = async () => { |
| | | try { |
| | | projectOptions.value = await loadProjectOptions(); |
| | | } catch (error) { |
| | | projectOptions.value = []; |
| | | } |
| | | }; |
| | | |
| | | // 报价单只带 projectId 不带名称时,从下拉选项反查补全,避免保存时把名称清空 |
| | | const resolveProjectName = () => { |
| | | if (form.value.projectName) return; |
| | | if (!form.value.projectId) { |
| | | form.value.projectName = ""; |
| | | return; |
| | | } |
| | | const matched = projectOptions.value.find( |
| | | option => String(option.value) === String(form.value.projectId) |
| | | ); |
| | | form.value.projectName = matched ? matched.name : ""; |
| | | }; |
| | | |
| | | // 根据名称反查节点 id,便于仅存名称时的反显 |
| | | const findNodeIdByLabel = (nodes, label) => { |
| | | if (!label) return null; |
| | |
| | | quotationNo: data.quotationNo || "", |
| | | customerId: data.customerId, |
| | | customer: data.customer || "", |
| | | projectId: data.projectId ?? "", |
| | | projectName: data.projectName || "", |
| | | salesperson: data.salesperson || "", |
| | | quotationDate: data.quotationDate || "", |
| | | validDate: data.validDate || "", |
| | |
| | | // 同步最新的总额 |
| | | form.value.totalAmount = totalAmount.value; |
| | | form.value.subtotal = totalAmount.value; |
| | | resolveProjectName(); |
| | | |
| | | const payload = { |
| | | ...form.value, |
| | |
| | | }); |
| | | |
| | | onMounted(async () => { |
| | | await fetchBaseOptions(); |
| | | await Promise.all([fetchBaseOptions(), loadProjectList()]); |
| | | if (quotationId.value) { |
| | | await loadDetail(); |
| | | } |