| | |
| | | // 应用全局配置 |
| | | const config = { |
| | | baseUrl: "http://1.15.17.182:9116", |
| | | fileUrl: "http://1.15.17.182:9115", |
| | | baseUrl: "http://36.213.90.123:9015", |
| | | fileUrl: "http://36.213.90.123:9016", |
| | | // 应用信息 |
| | | appInfo: { |
| | | // 应用名称 |
| | |
| | | { |
| | | "name" : "意博凯信", |
| | | "appid" : "__UNI__9BDA18B", |
| | | "description" : "", |
| | | "versionName" : "1.1.5", |
| | | "versionCode" : 100, |
| | | "transformPx" : false, |
| | | "name": "新聚工贸", |
| | | "appid": "__UNI__0E0D28E", |
| | | "description": "", |
| | | "versionName": "1.1.5", |
| | | "versionCode": 100, |
| | | "transformPx": false, |
| | | /* 5+App特有相关 */ |
| | | "app-plus" : { |
| | | "compatible" : { |
| | | "usingComponents" : true, |
| | | "ignoreVersion" : true |
| | | "app-plus": { |
| | | "compatible": { |
| | | "usingComponents": true, |
| | | "ignoreVersion": true |
| | | }, |
| | | "usingComponents" : true, |
| | | "nvueStyleCompiler" : "uni-app", |
| | | "compilerVersion" : 3, |
| | | "splashscreen" : { |
| | | "alwaysShowBeforeRender" : true, |
| | | "waiting" : true, |
| | | "autoclose" : true, |
| | | "delay" : 0 |
| | | "usingComponents": true, |
| | | "nvueStyleCompiler": "uni-app", |
| | | "compilerVersion": 3, |
| | | "splashscreen": { |
| | | "alwaysShowBeforeRender": true, |
| | | "waiting": true, |
| | | "autoclose": true, |
| | | "delay": 0 |
| | | }, |
| | | /* 模块配置 */ |
| | | "modules" : { |
| | | "Camera" : {}, |
| | | "Barcode" : {}, |
| | | "Maps" : {} |
| | | "modules": { |
| | | "Camera": {}, |
| | | "Barcode": {}, |
| | | "Maps": {} |
| | | }, |
| | | /* 应用发布信息 */ |
| | | "distribute" : { |
| | | "distribute": { |
| | | /* android打包配置 */ |
| | | "android" : { |
| | | "permissions" : [ |
| | | "android": { |
| | | "permissions": [ |
| | | "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", |
| | | "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", |
| | | "<uses-permission android:name=\"android.permission.VIBRATE\"/>", |
| | |
| | | ] |
| | | }, |
| | | /* ios打包配置 */ |
| | | "ios" : { |
| | | "dSYMs" : false, |
| | | "plist" : { |
| | | "NSLocationWhenInUseUsageDescription" : "需要获取您的位置信息来记录客户拜访地点", |
| | | "NSLocationAlwaysAndWhenInUseUsageDescription" : "需要获取您的位置信息来记录客户拜访地点" |
| | | "ios": { |
| | | "dSYMs": false, |
| | | "plist": { |
| | | "NSLocationWhenInUseUsageDescription": "需要获取您的位置信息来记录客户拜访地点", |
| | | "NSLocationAlwaysAndWhenInUseUsageDescription": "需要获取您的位置信息来记录客户拜访地点" |
| | | } |
| | | }, |
| | | /* SDK配置 */ |
| | | "sdkConfigs" : { |
| | | "push" : { |
| | | "unipush" : { |
| | | "icons" : { |
| | | "small" : { |
| | | "ldpi" : "D:/xindao/wenjian/img/logo/app.png" |
| | | "sdkConfigs": { |
| | | "push": { |
| | | "unipush": { |
| | | "icons": { |
| | | "small": { |
| | | "ldpi": "D:/xindao/wenjian/img/logo/app.png" |
| | | } |
| | | }, |
| | | "offline" : false |
| | | "offline": false |
| | | } |
| | | }, |
| | | "maps" : { |
| | | "amap" : { |
| | | "name" : "amap_18330707920ae9zOwCD", |
| | | "appkey_ios" : "c2b4e3889ab4cb9468e9c8ae4f3ab53f", |
| | | "appkey_android" : "c2b4e3889ab4cb9468e9c8ae4f3ab53f" |
| | | "maps": { |
| | | "amap": { |
| | | "name": "amap_18330707920ae9zOwCD", |
| | | "appkey_ios": "c2b4e3889ab4cb9468e9c8ae4f3ab53f", |
| | | "appkey_android": "c2b4e3889ab4cb9468e9c8ae4f3ab53f" |
| | | } |
| | | } |
| | | }, |
| | | "icons" : { |
| | | "android" : { |
| | | "hdpi" : "unpackage/res/icons/72x72.png", |
| | | "xhdpi" : "unpackage/res/icons/96x96.png", |
| | | "xxhdpi" : "unpackage/res/icons/144x144.png", |
| | | "xxxhdpi" : "unpackage/res/icons/192x192.png" |
| | | "icons": { |
| | | "android": { |
| | | "hdpi": "unpackage/res/icons/72x72.png", |
| | | "xhdpi": "unpackage/res/icons/96x96.png", |
| | | "xxhdpi": "unpackage/res/icons/144x144.png", |
| | | "xxxhdpi": "unpackage/res/icons/192x192.png" |
| | | }, |
| | | "ios" : { |
| | | "appstore" : "unpackage/res/icons/1024x1024.png", |
| | | "ipad" : { |
| | | "app" : "unpackage/res/icons/76x76.png", |
| | | "app@2x" : "unpackage/res/icons/152x152.png", |
| | | "notification" : "unpackage/res/icons/20x20.png", |
| | | "notification@2x" : "unpackage/res/icons/40x40.png", |
| | | "proapp@2x" : "unpackage/res/icons/167x167.png", |
| | | "settings" : "unpackage/res/icons/29x29.png", |
| | | "settings@2x" : "unpackage/res/icons/58x58.png", |
| | | "spotlight" : "unpackage/res/icons/40x40.png", |
| | | "spotlight@2x" : "unpackage/res/icons/80x80.png" |
| | | "ios": { |
| | | "appstore": "unpackage/res/icons/1024x1024.png", |
| | | "ipad": { |
| | | "app": "unpackage/res/icons/76x76.png", |
| | | "app@2x": "unpackage/res/icons/152x152.png", |
| | | "notification": "unpackage/res/icons/20x20.png", |
| | | "notification@2x": "unpackage/res/icons/40x40.png", |
| | | "proapp@2x": "unpackage/res/icons/167x167.png", |
| | | "settings": "unpackage/res/icons/29x29.png", |
| | | "settings@2x": "unpackage/res/icons/58x58.png", |
| | | "spotlight": "unpackage/res/icons/40x40.png", |
| | | "spotlight@2x": "unpackage/res/icons/80x80.png" |
| | | }, |
| | | "iphone" : { |
| | | "app@2x" : "unpackage/res/icons/120x120.png", |
| | | "app@3x" : "unpackage/res/icons/180x180.png", |
| | | "notification@2x" : "unpackage/res/icons/40x40.png", |
| | | "notification@3x" : "unpackage/res/icons/60x60.png", |
| | | "settings@2x" : "unpackage/res/icons/58x58.png", |
| | | "settings@3x" : "unpackage/res/icons/87x87.png", |
| | | "spotlight@2x" : "unpackage/res/icons/80x80.png", |
| | | "spotlight@3x" : "unpackage/res/icons/120x120.png" |
| | | "iphone": { |
| | | "app@2x": "unpackage/res/icons/120x120.png", |
| | | "app@3x": "unpackage/res/icons/180x180.png", |
| | | "notification@2x": "unpackage/res/icons/40x40.png", |
| | | "notification@3x": "unpackage/res/icons/60x60.png", |
| | | "settings@2x": "unpackage/res/icons/58x58.png", |
| | | "settings@3x": "unpackage/res/icons/87x87.png", |
| | | "spotlight@2x": "unpackage/res/icons/80x80.png", |
| | | "spotlight@3x": "unpackage/res/icons/120x120.png" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | /* 快应用特有相关 */ |
| | | "quickapp" : {}, |
| | | "quickapp": {}, |
| | | /* 小程序特有相关 */ |
| | | "mp-weixin" : { |
| | | "appid" : "", |
| | | "setting" : { |
| | | "urlCheck" : false |
| | | "mp-weixin": { |
| | | "appid": "", |
| | | "setting": { |
| | | "urlCheck": false |
| | | }, |
| | | "usingComponents" : true |
| | | "usingComponents": true |
| | | }, |
| | | "mp-alipay" : { |
| | | "usingComponents" : true |
| | | "mp-alipay": { |
| | | "usingComponents": true |
| | | }, |
| | | "mp-baidu" : { |
| | | "usingComponents" : true |
| | | "mp-baidu": { |
| | | "usingComponents": true |
| | | }, |
| | | "mp-toutiao" : { |
| | | "usingComponents" : true |
| | | "mp-toutiao": { |
| | | "usingComponents": true |
| | | }, |
| | | "uniStatistics" : { |
| | | "enable" : false |
| | | "uniStatistics": { |
| | | "enable": false |
| | | }, |
| | | "vueVersion" : "3" |
| | | } |
| | | "vueVersion": "3" |
| | | } |
| | |
| | | }; |
| | | |
| | | const customerTypeActions = [ |
| | | { name: "零售客户", value: "零售客户" }, |
| | | { name: "经销商客户", value: "经销商客户" }, |
| | | { name: "三大油", value: "三大油" }, |
| | | { name: "外销", value: "外销" }, |
| | | ]; |
| | | |
| | | const pageTitle = computed(() => |
| | |
| | | |
| | | const tabList = reactive([ |
| | | { name: "全部客户", value: "" }, |
| | | { name: "零售客户", value: "零售客户" }, |
| | | { name: "经销商客户", value: "经销商客户" }, |
| | | { name: "三大油", value: "三大油" }, |
| | | { name: "外销", value: "外销" }, |
| | | ]); |
| | | const tabValue = ref(0); |
| | | |
| | |
| | | <up-form-item label="账号" prop="bankAccountNum" required> |
| | | <up-input v-model="form.bankAccountNum" placeholder="请输入" clearable /> |
| | | </up-form-item> |
| | | <up-form-item label="银联行号" prop="bankCode"> |
| | | <up-input v-model="form.bankCode" placeholder="请输入" clearable /> |
| | | </up-form-item> |
| | | <up-form-item label="联系人" prop="contactUserName"> |
| | | <up-input v-model="form.contactUserName" placeholder="请输入" clearable /> |
| | | </up-form-item> |
| | |
| | | companyPhone: "", |
| | | bankAccountName: "", |
| | | bankAccountNum: "", |
| | | bankCode: "", |
| | | contactUserName: "", |
| | | contactUserPhone: "", |
| | | maintainUserId: "", |
| | |
| | | <text class="detail-value">{{ item.contactUserPhone || "-" }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">银联行号</text> |
| | | <text class="detail-value">{{ item.bankCode || "-" }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">维护人</text> |
| | | <text class="detail-value">{{ item.maintainUserName || "-" }}</text> |
| | | </view> |
| | |
| | | @click="editVisit(item)"> |
| | | 编辑 |
| | | </u-button> |
| | | <!-- <u-button type="error" |
| | | <u-button type="error" |
| | | size="small" |
| | | class="action-btn" |
| | | @click="deleteVisit(item)"> |
| | | 删除 |
| | | </u-button> --> |
| | | </u-button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | showInvoiceTypePicker.value = false; |
| | | }; |
| | | |
| | | // 格式化函数 - 固定两位小数 |
| | | // 金额固定两位小数,采购数量保留三位小数 |
| | | const formatTaxPrice = idx => { |
| | | if (productData.value[idx].taxInclusiveUnitPrice) { |
| | | const value = parseFloat(productData.value[idx].taxInclusiveUnitPrice); |
| | |
| | | if (productData.value[idx].quantity) { |
| | | const value = parseFloat(productData.value[idx].quantity); |
| | | if (!isNaN(value)) { |
| | | productData.value[idx].quantity = value.toFixed(2); |
| | | productData.value[idx].quantity = value.toFixed(3); |
| | | } |
| | | } |
| | | if (!productData.value[currentProductIndex.value].taxRate) { |
| | |
| | | color: #3b82f6; |
| | | font-size: 14px; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | plain |
| | | text="查看投入" |
| | | @click="handleShowInput(item)"></up-button> |
| | | <up-button type="info" |
| | | size="small" |
| | | plain |
| | | text="参数详情" |
| | | @click="handleShowParams(item)"></up-button> |
| | | <!-- <up-button type="error" |
| | | size="small" |
| | | plain |
| | |
| | | text="暂无投入数据" /> |
| | | </view> |
| | | </up-modal> |
| | | <!-- 参数详情弹窗 --> |
| | | <up-modal :show="paramsVisible" |
| | | title="参数详情" |
| | | @confirm="paramsVisible = false"> |
| | | <view class="modal-content"> |
| | | <view v-if="currentParams.length > 0"> |
| | | <view v-for="(param, idx) in currentParams" |
| | | :key="idx" |
| | | class="detail-row"> |
| | | <text class="detail-label">{{ param.paramName }}</text> |
| | | <text class="detail-value">{{ param.inputValue }} {{ param.unit && param.unit !== '/' ? '(' + param.unit + ')' : '' }}</text> |
| | | </view> |
| | | </view> |
| | | <up-empty v-else |
| | | mode="data" |
| | | text="暂无参数数据" /> |
| | | </view> |
| | | </up-modal> |
| | | </view> |
| | | </template> |
| | | |
| | |
| | | const inputVisible = ref(false); |
| | | const inputList = ref([]); |
| | | |
| | | // 参数详情相关 |
| | | const paramsVisible = ref(false); |
| | | const currentParams = ref([]); |
| | | |
| | | const goBack = () => { |
| | | uni.navigateBack(); |
| | |
| | | modal.closeLoading(); |
| | | modal.msgError("加载投入数据失败"); |
| | | }); |
| | | }; |
| | | |
| | | const handleShowParams = item => { |
| | | currentParams.value = item.productionOperationParamList || []; |
| | | paramsVisible.value = true; |
| | | }; |
| | | |
| | | const handleDelete = item => { |
| | |
| | | clearable /> |
| | | </up-form-item> |
| | | </block> |
| | | <up-form-item label="发货地址" prop="shippingAddress"> |
| | | <up-input v-model="form.shippingAddress" |
| | | placeholder="请输入发货地址" |
| | | clearable /> |
| | | </up-form-item> |
| | | </u-cell-group> |
| | | <!-- 批次选择 --> |
| | | <u-cell-group title="批次选择" |
| | |
| | | shippingCarNumber: "", |
| | | expressCompany: "", |
| | | expressNumber: "", |
| | | shippingAddress: "", |
| | | }); |
| | | |
| | | const rules = { |
| | |
| | | shippingCarNumber: form.type === "货车" ? form.shippingCarNumber : "", |
| | | expressCompany: form.type === "快递" ? form.expressCompany : "", |
| | | expressNumber: form.type === "快递" ? form.expressNumber : "", |
| | | shippingAddress: form.shippingAddress, |
| | | storageBlobDTOs: fileList.value |
| | | .filter(f => f.status === "success") |
| | | .map(f => f.storageBlobDTO), |
| | |
| | | <text class="detail-value">{{ item.shippingDate || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">发货地址</text> |
| | | <text class="detail-value">{{ item.shippingAddress || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">数量</text> |
| | | <text class="detail-value">{{ item.quantity }}</text> |
| | | </view> |
| | |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import FooterButtons from "@/components/FooterButtons.vue"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import { formatDateToYMD } from "@/utils/ruoyi"; |
| | | import { formatDateToYMD, parseTime } from "@/utils/ruoyi"; |
| | | import { modelList, productTreeList } from "@/api/basicData/product"; |
| | | import { userListNoPageByTenantId } from "@/api/system/user"; |
| | | import { |
| | |
| | | |
| | | const payload = { |
| | | ...form.value, |
| | | ...(!quotationId.value ? { createTime: parseTime(new Date()) } : {}), |
| | | products: form.value.products.map(item => ({ |
| | | productId: item.productId, |
| | | product: item.product, |