Commit 07d919386c907bd571f7d50c575349929f8137d5
Merge branch 'cjerp-1.0_20260116' into publish_cjerp
Showing
54 changed files
with
2248 additions
and
604 deletions
Too many changes to show.
To preserve performance only 54 of 155 files are displayed.
| @@ -48,6 +48,11 @@ | @@ -48,6 +48,11 @@ | ||
| 48 | <ui_properties converted="true" /> | 48 | <ui_properties converted="true" /> |
| 49 | </component> | 49 | </component> |
| 50 | <component name="Git.Settings"> | 50 | <component name="Git.Settings"> |
| 51 | + <option name="RECENT_BRANCH_BY_REPOSITORY"> | ||
| 52 | + <map> | ||
| 53 | + <entry key="$PROJECT_DIR$" value="publish_cjerp" /> | ||
| 54 | + </map> | ||
| 55 | + </option> | ||
| 51 | <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> | 56 | <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> |
| 52 | </component> | 57 | </component> |
| 53 | <component name="ProjectColorInfo">{ | 58 | <component name="ProjectColorInfo">{ |
| @@ -164,7 +169,19 @@ | @@ -164,7 +169,19 @@ | ||
| 164 | <map> | 169 | <map> |
| 165 | <entry key="MAIN"> | 170 | <entry key="MAIN"> |
| 166 | <value> | 171 | <value> |
| 167 | - <State /> | 172 | + <State> |
| 173 | + <option name="FILTERS"> | ||
| 174 | + <map> | ||
| 175 | + <entry key="branch"> | ||
| 176 | + <value> | ||
| 177 | + <list> | ||
| 178 | + <option value="cjerp-1.0_20251220" /> | ||
| 179 | + </list> | ||
| 180 | + </value> | ||
| 181 | + </entry> | ||
| 182 | + </map> | ||
| 183 | + </option> | ||
| 184 | + </State> | ||
| 168 | </value> | 185 | </value> |
| 169 | </entry> | 186 | </entry> |
| 170 | </map> | 187 | </map> |
| 1 | import request from '@/utils/request' | 1 | import request from '@/utils/request' |
| 2 | -import { ContentTypeEnum } from '@/utils/httpEnum'; | ||
| 3 | import config from '@/config' | 2 | import config from '@/config' |
| 4 | import { getToken } from '@/utils/auth' | 3 | import { getToken } from '@/utils/auth' |
| 5 | 4 | ||
| @@ -32,6 +31,20 @@ export function uploadFileApi(data) { | @@ -32,6 +31,20 @@ export function uploadFileApi(data) { | ||
| 32 | } | 31 | } |
| 33 | 32 | ||
| 34 | /** | 33 | /** |
| 34 | + * 下载文件通用接口 | ||
| 35 | + * @param id | ||
| 36 | + */ | ||
| 37 | +export function downloadFileApi(id) { | ||
| 38 | + return request({ | ||
| 39 | + url: `/download/security/url`, | ||
| 40 | + method: 'get', | ||
| 41 | + params: { | ||
| 42 | + id | ||
| 43 | + }, | ||
| 44 | + }) | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +/** | ||
| 35 | * 回去城市接口 省市区 一次性返回 | 48 | * 回去城市接口 省市区 一次性返回 |
| 36 | */ | 49 | */ |
| 37 | export function selectorCityApi() { | 50 | export function selectorCityApi() { |
| @@ -63,4 +76,4 @@ export function generateCodeApi(type) { | @@ -63,4 +76,4 @@ export function generateCodeApi(type) { | ||
| 63 | type | 76 | type |
| 64 | }, | 77 | }, |
| 65 | }) | 78 | }) |
| 66 | -} | ||
| 79 | +} |
api/car_request_order.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | +import { ContentTypeEnum } from '@/utils/httpEnum'; | ||
| 3 | + | ||
| 4 | +const baseUrl = '/requestCarTicket'; | ||
| 5 | +// 查询列表 | ||
| 6 | +export function queryApi(params) { | ||
| 7 | + return request({ | ||
| 8 | + url: baseUrl + `/query`, | ||
| 9 | + method: 'get', | ||
| 10 | + params | ||
| 11 | + }) | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +// 根据ID查询详情数据 | ||
| 15 | +export function getDetailApi(id) { | ||
| 16 | + return request({ | ||
| 17 | + url: baseUrl, | ||
| 18 | + method: 'get', | ||
| 19 | + params: { id } | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// 新增保存 | ||
| 24 | +export function createApi(params) { | ||
| 25 | + return request({ | ||
| 26 | + url: baseUrl, | ||
| 27 | + method: 'post', | ||
| 28 | + data: params, | ||
| 29 | + contentType: ContentTypeEnum.JSON | ||
| 30 | + }) | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | + | ||
| 34 | +// 修改保存 | ||
| 35 | +export function updateApi(params) { | ||
| 36 | + return request({ | ||
| 37 | + url: baseUrl, | ||
| 38 | + method: 'put', | ||
| 39 | + data: params, | ||
| 40 | + contentType: ContentTypeEnum.JSON | ||
| 41 | + }) | ||
| 42 | +} | ||
| 43 | + |
api/delay_invoice.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | +import { ContentTypeEnum } from '@/utils/httpEnum'; | ||
| 3 | + | ||
| 4 | +const baseUrl = '/delayedShipment'; | ||
| 5 | +// 查询列表 | ||
| 6 | +export function queryApi(params) { | ||
| 7 | + return request({ | ||
| 8 | + url: baseUrl + `/query`, | ||
| 9 | + method: 'get', | ||
| 10 | + params | ||
| 11 | + }) | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +// 根据ID查询详情数据 | ||
| 15 | +export function getDetailApi(id) { | ||
| 16 | + return request({ | ||
| 17 | + url: baseUrl, | ||
| 18 | + method: 'get', | ||
| 19 | + params: { id } | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// 取消 | ||
| 24 | +export function cancelApi(id) { | ||
| 25 | + return request({ | ||
| 26 | + url: baseUrl + '/cancel', | ||
| 27 | + method: 'get', | ||
| 28 | + params: { id } | ||
| 29 | + }) | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +// 延期发货按钮-选择的数据查询 | ||
| 33 | +export function getShipmentPlanDetailApi(id) { | ||
| 34 | + return request({ | ||
| 35 | + url: '/shipments/plan/detail', | ||
| 36 | + method: 'get', | ||
| 37 | + params: { id } | ||
| 38 | + }) | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +// 新增保存 | ||
| 42 | +export function createApi(params) { | ||
| 43 | + return request({ | ||
| 44 | + url: baseUrl, | ||
| 45 | + method: 'post', | ||
| 46 | + data: params, | ||
| 47 | + contentType: ContentTypeEnum.JSON | ||
| 48 | + }) | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | + | ||
| 52 | +// 修改保存 | ||
| 53 | +export function updateApi(params) { | ||
| 54 | + return request({ | ||
| 55 | + url: baseUrl, | ||
| 56 | + method: 'put', | ||
| 57 | + data: params, | ||
| 58 | + contentType: ContentTypeEnum.JSON | ||
| 59 | + }) | ||
| 60 | +} | ||
| 61 | + |
| @@ -2,13 +2,54 @@ import request from '@/utils/request' | @@ -2,13 +2,54 @@ import request from '@/utils/request' | ||
| 2 | import { ContentTypeEnum } from '@/utils/httpEnum'; | 2 | import { ContentTypeEnum } from '@/utils/httpEnum'; |
| 3 | 3 | ||
| 4 | const baseUrl = '/draftRequestCarTicket'; | 4 | const baseUrl = '/draftRequestCarTicket'; |
| 5 | +// 查询列表 | ||
| 6 | +export function queryApi(params) { | ||
| 7 | + return request({ | ||
| 8 | + url: baseUrl + `/query`, | ||
| 9 | + method: 'get', | ||
| 10 | + params | ||
| 11 | + }) | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +// 根据ID查询详情数据 | ||
| 15 | +export function getDetailApi(id) { | ||
| 16 | + return request({ | ||
| 17 | + url: baseUrl, | ||
| 18 | + method: 'get', | ||
| 19 | + params: { id } | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | + | ||
| 24 | +// 取消 | ||
| 25 | +export function cancelApi(id) { | ||
| 26 | + return request({ | ||
| 27 | + url: baseUrl + '/cancel', | ||
| 28 | + method: 'get', | ||
| 29 | + params: { id } | ||
| 30 | + }) | ||
| 31 | +} | ||
| 5 | 32 | ||
| 6 | // 新增保存 | 33 | // 新增保存 |
| 7 | export function createApi(params) { | 34 | export function createApi(params) { |
| 8 | return request({ | 35 | return request({ |
| 9 | - url: `${baseUrl}`, | 36 | + url: baseUrl, |
| 10 | method: 'post', | 37 | method: 'post', |
| 11 | data: params, | 38 | data: params, |
| 12 | contentType: ContentTypeEnum.JSON | 39 | contentType: ContentTypeEnum.JSON |
| 13 | }) | 40 | }) |
| 14 | } | 41 | } |
| 42 | + | ||
| 43 | + | ||
| 44 | + | ||
| 45 | +// 修改保存 | ||
| 46 | +export function updateApi(params) { | ||
| 47 | + return request({ | ||
| 48 | + url: baseUrl, | ||
| 49 | + method: 'put', | ||
| 50 | + data: params, | ||
| 51 | + contentType: ContentTypeEnum.JSON | ||
| 52 | + }) | ||
| 53 | +} | ||
| 54 | + | ||
| 55 | + |
api/invoice.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | +import { ContentTypeEnum } from '@/utils/httpEnum'; | ||
| 3 | + | ||
| 4 | +const baseUrl = '/shipments/order'; | ||
| 5 | +// 查询列表 | ||
| 6 | +export function queryApi(params) { | ||
| 7 | + return request({ | ||
| 8 | + url: baseUrl + `/query`, | ||
| 9 | + method: 'get', | ||
| 10 | + params | ||
| 11 | + }) | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +// 根据ID查询详情数据 | ||
| 15 | +export function getDetailApi(id) { | ||
| 16 | + return request({ | ||
| 17 | + url: baseUrl, | ||
| 18 | + method: 'get', | ||
| 19 | + params: { id } | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// 新增保存 | ||
| 24 | +export function createApi(params) { | ||
| 25 | + return request({ | ||
| 26 | + url: baseUrl, | ||
| 27 | + method: 'post', | ||
| 28 | + data: params, | ||
| 29 | + contentType: ContentTypeEnum.FORM_URLENCODED | ||
| 30 | + }) | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | + | ||
| 34 | +// 修改保存 | ||
| 35 | +export function updateApi(params) { | ||
| 36 | + return request({ | ||
| 37 | + url: baseUrl, | ||
| 38 | + method: 'put', | ||
| 39 | + data: params, | ||
| 40 | + contentType: ContentTypeEnum.FORM_URLENCODED | ||
| 41 | + }) | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | + | ||
| 45 | +// 检查发货计划是否可以填写实发数 | ||
| 46 | +// [id1, id2, ...] | ||
| 47 | +export function checkApi(ids) { | ||
| 48 | + return request({ | ||
| 49 | + url: baseUrl + '/check', | ||
| 50 | + method: 'post', | ||
| 51 | + data: ids, | ||
| 52 | + contentType: ContentTypeEnum.JSON | ||
| 53 | + }) | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +// 根据发货计划ID查询发货订单列表 | ||
| 57 | +export function listByShipmentOrderId(shipmentsOrderId) { | ||
| 58 | + return request({ | ||
| 59 | + url: baseUrl + '/listByShipmentOrderId', | ||
| 60 | + method: 'get', | ||
| 61 | + params: { shipmentsOrderId } | ||
| 62 | + }) | ||
| 63 | +} | ||
| 64 | + | ||
| 65 | +// 根据发货计划ID查询发货订单列表 | ||
| 66 | +// { | ||
| 67 | +// id, | ||
| 68 | +// detailList, | ||
| 69 | +// type, | ||
| 70 | +// } | ||
| 71 | +export function dataReplenishInput(params) { | ||
| 72 | + return request({ | ||
| 73 | + url: baseUrl + '/dataReplenishInput', | ||
| 74 | + method: 'post', | ||
| 75 | + data: params, | ||
| 76 | + contentType: ContentTypeEnum.JSON | ||
| 77 | + }) | ||
| 78 | +} | ||
| 79 | + | ||
| 80 | +// 保存签收单 | ||
| 81 | +// { | ||
| 82 | +// fileId: String; | ||
| 83 | +// fileName: String; | ||
| 84 | +// shipmentsOrderId: String; | ||
| 85 | +// } | ||
| 86 | +export function saveSignInTicket(params) { | ||
| 87 | + return request({ | ||
| 88 | + url: baseUrl + '/saveSignInTicket', | ||
| 89 | + method: 'get', | ||
| 90 | + params: params, | ||
| 91 | + }) | ||
| 92 | +} | ||
| 93 | + | ||
| 94 | +// 查询发货计划详情 | ||
| 95 | +export function queryDetail(params) { | ||
| 96 | + return request({ | ||
| 97 | + url: '/shipments/plan/detail/query', | ||
| 98 | + method: 'get', | ||
| 99 | + params: params, | ||
| 100 | + }) | ||
| 101 | +} | ||
| 102 | + | ||
| 103 | +// 发货单-拆分 | ||
| 104 | +export function splitDataApi(params) { | ||
| 105 | + return request({ | ||
| 106 | + url: '/shipments/plan/detail/split', | ||
| 107 | + method: 'post', | ||
| 108 | + data: params, | ||
| 109 | + contentType: ContentTypeEnum.JSON | ||
| 110 | + }) | ||
| 111 | +} |
api/replenishment_order.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | +import { ContentTypeEnum } from '@/utils/httpEnum'; | ||
| 3 | + | ||
| 4 | +const baseUrl = '/shipments/replenishmentOrder'; | ||
| 5 | +// 查询列表 | ||
| 6 | +export function queryApi(params) { | ||
| 7 | + return request({ | ||
| 8 | + url: baseUrl + `/query`, | ||
| 9 | + method: 'get', | ||
| 10 | + params | ||
| 11 | + }) | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +// 根据ID查询详情数据 | ||
| 15 | +export function getDetailApi(id) { | ||
| 16 | + return request({ | ||
| 17 | + url: baseUrl, | ||
| 18 | + method: 'get', | ||
| 19 | + params: { id } | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// 获取订单编号 | ||
| 24 | +export function getCodeApi(purchaseOrderId) { | ||
| 25 | + return request({ | ||
| 26 | + url: baseUrl + '/getCode', | ||
| 27 | + method: 'get', | ||
| 28 | + params: { purchaseOrderId } | ||
| 29 | + }) | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | + | ||
| 33 | +// 取消 | ||
| 34 | +export function cancelApi(id) { | ||
| 35 | + return request({ | ||
| 36 | + url: baseUrl + '/cancel', | ||
| 37 | + method: 'get', | ||
| 38 | + params: { id } | ||
| 39 | + }) | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +// 新增保存 | ||
| 43 | +export function createApi(params) { | ||
| 44 | + return request({ | ||
| 45 | + url: baseUrl, | ||
| 46 | + method: 'post', | ||
| 47 | + data: params, | ||
| 48 | + contentType: ContentTypeEnum.JSON | ||
| 49 | + }) | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | + | ||
| 53 | +// 填写计划补货时间 | ||
| 54 | +export function fillRestockTimeApi(params) { | ||
| 55 | + return request({ | ||
| 56 | + url: baseUrl + '/fillRestockTime', | ||
| 57 | + method: 'post', | ||
| 58 | + data: params, | ||
| 59 | + contentType: ContentTypeEnum.JSON | ||
| 60 | + }) | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | + | ||
| 64 | +// 修改保存 | ||
| 65 | +export function updateApi(params) { | ||
| 66 | + return request({ | ||
| 67 | + url: baseUrl, | ||
| 68 | + method: 'put', | ||
| 69 | + data: params, | ||
| 70 | + contentType: ContentTypeEnum.JSON | ||
| 71 | + }) | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +// 通过订单ID 补货单-获取订货单列表 | ||
| 75 | +export function loadOrderApi(ids) { | ||
| 76 | + return request({ | ||
| 77 | + url: `/selector/replenishment/order/load`, | ||
| 78 | + method: 'post', | ||
| 79 | + data: ids, | ||
| 80 | + contentType: ContentTypeEnum.JSON | ||
| 81 | + }) | ||
| 82 | +} |
| @@ -4,9 +4,6 @@ | @@ -4,9 +4,6 @@ | ||
| 4 | class="scroll" | 4 | class="scroll" |
| 5 | scroll-y | 5 | scroll-y |
| 6 | :lower-threshold="lowerThreshold" | 6 | :lower-threshold="lowerThreshold" |
| 7 | - :refresher-enabled="enableRefresh" | ||
| 8 | - :refresher-triggered="refresherTriggered" | ||
| 9 | - @refresherrefresh="onRefresh" | ||
| 10 | @scrolltolower="onLoadMore" | 7 | @scrolltolower="onLoadMore" |
| 11 | @scroll="onScroll" | 8 | @scroll="onScroll" |
| 12 | > | 9 | > |
| @@ -52,10 +52,10 @@ | @@ -52,10 +52,10 @@ | ||
| 52 | }}</text></view> | 52 | }}</text></view> |
| 53 | </view> | 53 | </view> |
| 54 | 54 | ||
| 55 | - <view class="section" v-if="status === 'STANDARD'"> | ||
| 56 | - <view class="row"><text class="label">正式规范性合同</text><text class="value" style="color: #3D48A3;">{{ | ||
| 57 | - detail.standardFileName || '-' }}</text></view> | ||
| 58 | - <view class="row"><text class="label">正式合同是否规范</text><text class="value">{{ detail.standardStandardized ? | 55 | + <view class="section" v-if="detail.status === 'FORMAL'"> |
| 56 | + <view class="row"><text class="label">正式规范性合同</text><text class="value act" @click="downloadFile(detail.formalFileId, detail.formalFileName)">{{ | ||
| 57 | + detail.formalFileName || '-' }}</text></view> | ||
| 58 | + <view class="row"><text class="label">正式合同是否规范</text><text class="value">{{ detail.formalStandardized ? | ||
| 59 | '是' : '否' }}</text></view> | 59 | '是' : '否' }}</text></view> |
| 60 | </view> | 60 | </view> |
| 61 | 61 | ||
| @@ -80,6 +80,7 @@ | @@ -80,6 +80,7 @@ | ||
| 80 | <script> | 80 | <script> |
| 81 | import { getContractApi } from '@/api/contract' | 81 | import { getContractApi } from '@/api/contract' |
| 82 | import ProductRel from './productRel.vue' | 82 | import ProductRel from './productRel.vue' |
| 83 | +import { downloadFile } from '@/utils/downloadFile.js' | ||
| 83 | 84 | ||
| 84 | export default { | 85 | export default { |
| 85 | name: 'FormalContractViewer', | 86 | name: 'FormalContractViewer', |
| @@ -160,6 +161,7 @@ export default { | @@ -160,6 +161,7 @@ export default { | ||
| 160 | this.productList = lines | 161 | this.productList = lines |
| 161 | }).catch(() => { }) | 162 | }).catch(() => { }) |
| 162 | }, | 163 | }, |
| 164 | + downloadFile, | ||
| 163 | getFormValues() { | 165 | getFormValues() { |
| 164 | const m = this.detail || {} | 166 | const m = this.detail || {} |
| 165 | return JSON.parse(JSON.stringify(m)) | 167 | return JSON.parse(JSON.stringify(m)) |
| @@ -205,7 +207,8 @@ export default { | @@ -205,7 +207,8 @@ export default { | ||
| 205 | } | 207 | } |
| 206 | 208 | ||
| 207 | .label { | 209 | .label { |
| 208 | - width: 280rpx; | 210 | + max-width: 280rpx; |
| 211 | + margin-right: 20rpx; | ||
| 209 | color: rgba(0, 0, 0, 0.6); | 212 | color: rgba(0, 0, 0, 0.6); |
| 210 | font-size: 28rpx; | 213 | font-size: 28rpx; |
| 211 | } | 214 | } |
| @@ -219,7 +222,8 @@ export default { | @@ -219,7 +222,8 @@ export default { | ||
| 219 | } | 222 | } |
| 220 | 223 | ||
| 221 | .label1 { | 224 | .label1 { |
| 222 | - width: 280rpx; | 225 | + max-width: 280rpx; |
| 226 | + margin-right: 20rpx; | ||
| 223 | color: rgba(0, 0, 0, 0.6); | 227 | color: rgba(0, 0, 0, 0.6); |
| 224 | font-size: 32rpx; | 228 | font-size: 32rpx; |
| 225 | } | 229 | } |
| @@ -229,6 +233,13 @@ export default { | @@ -229,6 +233,13 @@ export default { | ||
| 229 | text-align: right; | 233 | text-align: right; |
| 230 | color: rgba(0, 0, 0, 0.9); | 234 | color: rgba(0, 0, 0, 0.9); |
| 231 | font-size: 28rpx; | 235 | font-size: 28rpx; |
| 236 | + text-align: right; | ||
| 237 | + word-break: break-all; | ||
| 238 | + | ||
| 239 | + &.act { | ||
| 240 | + color: $theme-primary; | ||
| 241 | + } | ||
| 242 | + | ||
| 232 | } | 243 | } |
| 233 | 244 | ||
| 234 | .customer { | 245 | .customer { |
| @@ -119,12 +119,12 @@ | @@ -119,12 +119,12 @@ | ||
| 119 | </uni-list-item> | 119 | </uni-list-item> |
| 120 | <uni-list-item title="不含税金额"> | 120 | <uni-list-item title="不含税金额"> |
| 121 | <template v-slot:footer> | 121 | <template v-slot:footer> |
| 122 | - <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 122 | + <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="" /> |
| 123 | </template> | 123 | </template> |
| 124 | </uni-list-item> | 124 | </uni-list-item> |
| 125 | <uni-list-item title="总金额"> | 125 | <uni-list-item title="总金额"> |
| 126 | <template v-slot:footer> | 126 | <template v-slot:footer> |
| 127 | - <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 127 | + <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="" /> |
| 128 | </template> | 128 | </template> |
| 129 | </uni-list-item> | 129 | </uni-list-item> |
| 130 | <uni-list-item title="发货日期"> | 130 | <uni-list-item title="发货日期"> |
| @@ -153,28 +153,32 @@ | @@ -153,28 +153,32 @@ | ||
| 153 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> | 153 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> |
| 154 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> | 154 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> |
| 155 | <view class="row row-spec"><text class="label">规格(mm)</text> | 155 | <view class="row row-spec"><text class="label">规格(mm)</text> |
| 156 | - <view class="value value-spec"> | ||
| 157 | - <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 158 | - <view v-if="item.thickness" class="value-spec_box"> | ||
| 159 | - <view v-if="item.thicknessTolPos" class="value-spec_box_1">+{{ item.thicknessTolPos }} | ||
| 160 | - </view> | ||
| 161 | - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">-{{ item.thicknessTolNeg }} | ||
| 162 | - </view> | 156 | + <view class="value value-spec"> |
| 157 | + <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 158 | + <view v-if="item.thickness" class="value-spec_box"> | ||
| 159 | + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos }} | ||
| 163 | </view> | 160 | </view> |
| 164 | - <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 165 | - <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 166 | - <view v-if="item.width" class="value-spec_box"> | ||
| 167 | - <view v-if="item.widthTolPos" class="value-spec_box_1">+{{ item.widthTolPos }}</view> | ||
| 168 | - <view v-if="item.widthTolNeg" class="value-spec_box_2">-{{ item.widthTolNeg }}</view> | 161 | + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }} |
| 169 | </view> | 162 | </view> |
| 170 | - <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 171 | - <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 172 | - <view v-if="item.length" class="value-spec_box"> | ||
| 173 | - <view v-if="item.lengthTolPos" class="value-spec_box_1">+{{ item.lengthTolPos }}</view> | ||
| 174 | - <view v-if="item.lengthTolNeg" class="value-spec_box_2">-{{ item.lengthTolNeg }}</view> | 163 | + </view> |
| 164 | + <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 165 | + <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 166 | + <view v-if="item.width" class="value-spec_box"> | ||
| 167 | + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' + item.widthTolPos : item.widthTolPos }} | ||
| 168 | + </view> | ||
| 169 | + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' + item.widthTolNeg : item.widthTolNeg }} | ||
| 170 | + </view> | ||
| 171 | + </view> | ||
| 172 | + <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 173 | + <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 174 | + <view v-if="item.length" class="value-spec_box"> | ||
| 175 | + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' + item.lengthTolPos : item.lengthTolPos }} | ||
| 176 | + </view> | ||
| 177 | + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' + item.lengthTolNeg : item.lengthTolNeg }} | ||
| 175 | </view> | 178 | </view> |
| 176 | </view> | 179 | </view> |
| 177 | </view> | 180 | </view> |
| 181 | + </view> | ||
| 178 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> | 182 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> |
| 179 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> | 183 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> |
| 180 | <view class="row"><text class="label">单价</text><text class="value">{{ formatCurrency(item.unitPrice) | 184 | <view class="row"><text class="label">单价</text><text class="value">{{ formatCurrency(item.unitPrice) |
| @@ -52,8 +52,8 @@ | @@ -52,8 +52,8 @@ | ||
| 52 | }}</text></view> | 52 | }}</text></view> |
| 53 | </view> | 53 | </view> |
| 54 | 54 | ||
| 55 | - <view class="section" v-if="status === 'STANDARD'"> | ||
| 56 | - <view class="row"><text class="label">标准规范性合同</text><text class="value" style="color: #3D48A3;">{{ | 55 | + <view class="section" v-if="detail.status === 'STANDARD'"> |
| 56 | + <view class="row"><text class="label">标准规范性合同</text><text class="value act" @click="downloadFile(detail.standardFileId, detail.standardFileName)">{{ | ||
| 57 | detail.standardFileName || '-' }}</text></view> | 57 | detail.standardFileName || '-' }}</text></view> |
| 58 | <view class="row"><text class="label">标准合同是否规范</text><text class="value">{{ detail.standardStandardized ? | 58 | <view class="row"><text class="label">标准合同是否规范</text><text class="value">{{ detail.standardStandardized ? |
| 59 | '是' : '否' }}</text></view> | 59 | '是' : '否' }}</text></view> |
| @@ -80,6 +80,7 @@ | @@ -80,6 +80,7 @@ | ||
| 80 | <script> | 80 | <script> |
| 81 | import { getContractApi } from '@/api/contract' | 81 | import { getContractApi } from '@/api/contract' |
| 82 | import ProductRel from './productRel.vue' | 82 | import ProductRel from './productRel.vue' |
| 83 | +import { downloadFile } from '@/utils/downloadFile.js' | ||
| 83 | 84 | ||
| 84 | export default { | 85 | export default { |
| 85 | name: 'StandardContractViewer', | 86 | name: 'StandardContractViewer', |
| @@ -160,6 +161,7 @@ export default { | @@ -160,6 +161,7 @@ export default { | ||
| 160 | this.productList = lines | 161 | this.productList = lines |
| 161 | }).catch(() => { }) | 162 | }).catch(() => { }) |
| 162 | }, | 163 | }, |
| 164 | + downloadFile, | ||
| 163 | getFormValues() { | 165 | getFormValues() { |
| 164 | const m = this.detail || {} | 166 | const m = this.detail || {} |
| 165 | return JSON.parse(JSON.stringify(m)) | 167 | return JSON.parse(JSON.stringify(m)) |
| @@ -205,7 +207,8 @@ export default { | @@ -205,7 +207,8 @@ export default { | ||
| 205 | } | 207 | } |
| 206 | 208 | ||
| 207 | .label { | 209 | .label { |
| 208 | - width: 280rpx; | 210 | + max-width: 280rpx; |
| 211 | + margin-right: 20rpx; | ||
| 209 | color: rgba(0, 0, 0, 0.6); | 212 | color: rgba(0, 0, 0, 0.6); |
| 210 | font-size: 28rpx; | 213 | font-size: 28rpx; |
| 211 | } | 214 | } |
| @@ -219,7 +222,8 @@ export default { | @@ -219,7 +222,8 @@ export default { | ||
| 219 | } | 222 | } |
| 220 | 223 | ||
| 221 | .label1 { | 224 | .label1 { |
| 222 | - width: 280rpx; | 225 | + max-width: 280rpx; |
| 226 | + margin-right: 20rpx; | ||
| 223 | color: rgba(0, 0, 0, 0.6); | 227 | color: rgba(0, 0, 0, 0.6); |
| 224 | font-size: 32rpx; | 228 | font-size: 32rpx; |
| 225 | } | 229 | } |
| @@ -228,7 +232,12 @@ export default { | @@ -228,7 +232,12 @@ export default { | ||
| 228 | flex: 1; | 232 | flex: 1; |
| 229 | text-align: right; | 233 | text-align: right; |
| 230 | color: rgba(0, 0, 0, 0.9); | 234 | color: rgba(0, 0, 0, 0.9); |
| 231 | - font-size: 28rpx; | 235 | + font-size: 28rpx; text-align: right; |
| 236 | + word-break: break-all; | ||
| 237 | + | ||
| 238 | + &.act { | ||
| 239 | + color: $theme-primary; | ||
| 240 | + } | ||
| 232 | } | 241 | } |
| 233 | 242 | ||
| 234 | .customer { | 243 | .customer { |
| 1 | <template> | 1 | <template> |
| 2 | - <view class="button-bar"> | 2 | + <view v-if="effectiveButtons.length" class="button-bar"> |
| 3 | <view v-if="showMoreButton" class="more-link" @click="toggleMore">更多</view> | 3 | <view v-if="showMoreButton" class="more-link" @click="toggleMore">更多</view> |
| 4 | <view class="button-grid" :style="{ gridTemplateColumns: gridColumns }"> | 4 | <view class="button-grid" :style="{ gridTemplateColumns: gridColumns }"> |
| 5 | <view v-for="(btn, idx) in visibleButtons" :key="idx" class="action-button" :class="buttonClass(btn)" :style="buttonStyle(btn)" @click="emitClick(btn)">{{ btn.text }}</view> | 5 | <view v-for="(btn, idx) in visibleButtons" :key="idx" class="action-button" :class="buttonClass(btn)" :style="buttonStyle(btn)" @click="emitClick(btn)">{{ btn.text }}</view> |
| @@ -111,5 +111,7 @@ export default { | @@ -111,5 +111,7 @@ export default { | ||
| 111 | .file-name { | 111 | .file-name { |
| 112 | font-size: 28rpx; color: rgba(0,0,0,0.9); | 112 | font-size: 28rpx; color: rgba(0,0,0,0.9); |
| 113 | line-height: 40rpx; | 113 | line-height: 40rpx; |
| 114 | + white-space: pre-wrap; | ||
| 115 | + word-break: break-all; | ||
| 114 | } | 116 | } |
| 115 | </style> | 117 | </style> |
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | <view class="filter-modal"> | 3 | <view class="filter-modal"> |
| 4 | <view class="header"> | 4 | <view class="header"> |
| 5 | <text class="title">{{ title }}</text> | 5 | <text class="title">{{ title }}</text> |
| 6 | - <text class="close" @click="onClose">×</text> | 6 | + <text class="close" @click="onClose"></text> |
| 7 | </view> | 7 | </view> |
| 8 | 8 | ||
| 9 | <view class="body"> | 9 | <view class="body"> |
| @@ -110,8 +110,12 @@ export default { | @@ -110,8 +110,12 @@ export default { | ||
| 110 | text-align: center; | 110 | text-align: center; |
| 111 | } | 111 | } |
| 112 | .close { | 112 | .close { |
| 113 | - font-size: 36rpx; | ||
| 114 | - color: #666; | 113 | + width: 48rpx; |
| 114 | + height: 48rpx; | ||
| 115 | + background-image: url('~@/static/images/flow/close_icon.png'); | ||
| 116 | + background-repeat: no-repeat; | ||
| 117 | + background-position: right center; | ||
| 118 | + background-size: cover; | ||
| 115 | } | 119 | } |
| 116 | .body { | 120 | .body { |
| 117 | flex: 1 1 auto; | 121 | flex: 1 1 auto; |
| @@ -143,4 +147,11 @@ export default { | @@ -143,4 +147,11 @@ export default { | ||
| 143 | background: $theme-primary; | 147 | background: $theme-primary; |
| 144 | color: #fff; | 148 | color: #fff; |
| 145 | } | 149 | } |
| 150 | + | ||
| 151 | +.uni-input-placeholder, .uni-input-input { | ||
| 152 | + font-size: 32rpx !important; | ||
| 153 | +} | ||
| 154 | +.uni-input-placeholder { | ||
| 155 | + color: rgba(0, 0, 0, 0.4) !important; | ||
| 156 | +} | ||
| 146 | </style> | 157 | </style> |
components/multi-select/index.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <uni-popup ref="popup" type="bottom" :mask-click="false" :safe-area="true"> | ||
| 3 | + <view class="sheet"> | ||
| 4 | + <view class="sheet-header"> | ||
| 5 | + <text class="cancel" @click="onCancel">取消</text> | ||
| 6 | + <text class="title">{{ title }}</text> | ||
| 7 | + <text class="ok" @click="onConfirm">确认</text> | ||
| 8 | + </view> | ||
| 9 | + <view class="sheet-body"> | ||
| 10 | + <view | ||
| 11 | + v-for="(opt, i) in options" | ||
| 12 | + :key="i" | ||
| 13 | + :class="['option', { selected: isSelected(opt) }]" | ||
| 14 | + @click="toggle(opt)" | ||
| 15 | + > | ||
| 16 | + <text class="label">{{ displayOf(opt) }}</text> | ||
| 17 | + </view> | ||
| 18 | + </view> | ||
| 19 | + </view> | ||
| 20 | + </uni-popup> | ||
| 21 | +</template> | ||
| 22 | + | ||
| 23 | +<script> | ||
| 24 | +export default { | ||
| 25 | + name: 'MultiSelectSheet', | ||
| 26 | + props: { | ||
| 27 | + visible: { type: Boolean, default: false }, | ||
| 28 | + title: { type: String, default: '请选择' }, | ||
| 29 | + // 统一约定:options 为 [{ label: string, value: string|number }] | ||
| 30 | + options: { type: Array, default: () => [] }, | ||
| 31 | + // 接收逗号分隔的字符串 '111,222,333' | ||
| 32 | + value: { type: String, default: '' } | ||
| 33 | + }, | ||
| 34 | + data() { | ||
| 35 | + return { | ||
| 36 | + innerValue: [] // 内部维护数组形式 | ||
| 37 | + } | ||
| 38 | + }, | ||
| 39 | + watch: { | ||
| 40 | + value(v) { this.initInnerValue(v) }, | ||
| 41 | + visible(v) { v ? this.open() : this.close() } | ||
| 42 | + }, | ||
| 43 | + mounted() { | ||
| 44 | + if (this.visible) this.open() | ||
| 45 | + }, | ||
| 46 | + methods: { | ||
| 47 | + initInnerValue(val) { | ||
| 48 | + if (!val) { | ||
| 49 | + this.innerValue = [] | ||
| 50 | + } else { | ||
| 51 | + this.innerValue = String(val).split(',').filter(x => x) | ||
| 52 | + } | ||
| 53 | + }, | ||
| 54 | + open() { | ||
| 55 | + this.initInnerValue(this.value) | ||
| 56 | + this.$refs.popup && this.$refs.popup.open() | ||
| 57 | + this.$emit('update:visible', true) | ||
| 58 | + }, | ||
| 59 | + close() { | ||
| 60 | + this.$refs.popup && this.$refs.popup.close() | ||
| 61 | + this.$emit('update:visible', false) | ||
| 62 | + }, | ||
| 63 | + displayOf(opt) { | ||
| 64 | + if (!opt) return '' | ||
| 65 | + return opt.label != null ? String(opt.label) : '' | ||
| 66 | + }, | ||
| 67 | + valueOf(opt) { | ||
| 68 | + if (!opt) return '' | ||
| 69 | + return opt.value != null ? String(opt.value) : '' | ||
| 70 | + }, | ||
| 71 | + isSelected(opt) { | ||
| 72 | + const v = this.valueOf(opt) | ||
| 73 | + return this.innerValue.includes(v) | ||
| 74 | + }, | ||
| 75 | + toggle(opt) { | ||
| 76 | + const v = this.valueOf(opt) | ||
| 77 | + const idx = this.innerValue.indexOf(v) | ||
| 78 | + if (idx > -1) { | ||
| 79 | + this.innerValue.splice(idx, 1) | ||
| 80 | + } else { | ||
| 81 | + this.innerValue.push(v) | ||
| 82 | + } | ||
| 83 | + }, | ||
| 84 | + onCancel() { | ||
| 85 | + this.close() | ||
| 86 | + this.$emit('cancel') | ||
| 87 | + }, | ||
| 88 | + onConfirm() { | ||
| 89 | + const selectedValues = this.innerValue | ||
| 90 | + // 保持原始选项顺序 | ||
| 91 | + const sortedValues = [] | ||
| 92 | + const sortedLabels = [] | ||
| 93 | + | ||
| 94 | + this.options.forEach(opt => { | ||
| 95 | + const v = this.valueOf(opt) | ||
| 96 | + if (selectedValues.includes(v)) { | ||
| 97 | + sortedValues.push(v) | ||
| 98 | + sortedLabels.push(this.displayOf(opt)) | ||
| 99 | + } | ||
| 100 | + }) | ||
| 101 | + | ||
| 102 | + const valStr = sortedValues.join(',') | ||
| 103 | + const labelStr = sortedLabels.join(',') | ||
| 104 | + | ||
| 105 | + this.$emit('confirm', { value: valStr, label: labelStr }) | ||
| 106 | + this.$emit('input', valStr) | ||
| 107 | + this.$emit('update:value', valStr) | ||
| 108 | + this.close() | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | +} | ||
| 112 | +</script> | ||
| 113 | + | ||
| 114 | +<style lang="scss" scoped> | ||
| 115 | +.sheet { | ||
| 116 | + width: 100%; | ||
| 117 | + max-height: 45vh; | ||
| 118 | + background: #fff; | ||
| 119 | + border-radius: 20rpx 20rpx 0 0; | ||
| 120 | + display: flex; | ||
| 121 | + flex-direction: column; | ||
| 122 | +} | ||
| 123 | +.sheet-header { | ||
| 124 | + display: flex; | ||
| 125 | + align-items: center; | ||
| 126 | + justify-content: space-between; | ||
| 127 | + padding: 30rpx 32rpx; | ||
| 128 | + border-bottom: 1rpx solid #f0f0f0; | ||
| 129 | +} | ||
| 130 | +.title { | ||
| 131 | + font-size: 36rpx; | ||
| 132 | + font-weight: 600; | ||
| 133 | +} | ||
| 134 | +.cancel { | ||
| 135 | + color: rgba(0,0,0,0.6); | ||
| 136 | + font-size: 28rpx; | ||
| 137 | +} | ||
| 138 | +.ok { | ||
| 139 | + color: $theme-primary; | ||
| 140 | + font-size: 28rpx; | ||
| 141 | +} | ||
| 142 | +.sheet-body { | ||
| 143 | + flex: 1 1 auto; | ||
| 144 | + overflow-y: auto; | ||
| 145 | + padding: 32rpx; | ||
| 146 | +} | ||
| 147 | +.option { | ||
| 148 | + padding: 20rpx; | ||
| 149 | + line-height: 40rpx; | ||
| 150 | + background: #fff; | ||
| 151 | + text-align: center; | ||
| 152 | + border-radius: 12rpx; | ||
| 153 | + font-size: 32rpx; | ||
| 154 | + margin-bottom: 20rpx; | ||
| 155 | + .label { | ||
| 156 | + color: rgba(0,0,0,0.6); | ||
| 157 | + font-size: 32rpx; | ||
| 158 | + } | ||
| 159 | + &.selected { | ||
| 160 | + background: #f3f3f3; | ||
| 161 | + .label { | ||
| 162 | + color: rgba(0,0,0,0.9); | ||
| 163 | + } | ||
| 164 | + } | ||
| 165 | +} | ||
| 166 | +</style> |
| @@ -129,7 +129,7 @@ export default { | @@ -129,7 +129,7 @@ export default { | ||
| 129 | if (this.source === 'customer') { | 129 | if (this.source === 'customer') { |
| 130 | console.log('customer_extra', extra) | 130 | console.log('customer_extra', extra) |
| 131 | const source = (extra && extra.source) || ''; | 131 | const source = (extra && extra.source) || ''; |
| 132 | - const params = { pageIndex, pageSize, name, source } | 132 | + const params = { pageIndex, pageSize, name, source, available: true } |
| 133 | return customerQueryApi(params).then(res => { | 133 | return customerQueryApi(params).then(res => { |
| 134 | const _data = res.data || {} | 134 | const _data = res.data || {} |
| 135 | const records = _data.datas || [] | 135 | const records = _data.datas || [] |
| @@ -139,7 +139,7 @@ export default { | @@ -139,7 +139,7 @@ export default { | ||
| 139 | }) | 139 | }) |
| 140 | } else if (this.source === 'user') { | 140 | } else if (this.source === 'user') { |
| 141 | // 人员表 | 141 | // 人员表 |
| 142 | - const params = { pageIndex, pageSize, name } | 142 | + const params = { pageIndex, pageSize, name, available: true } |
| 143 | return userSelector(params).then(res => { | 143 | return userSelector(params).then(res => { |
| 144 | const _data = res.data || {} | 144 | const _data = res.data || {} |
| 145 | const records = _data.datas || _data.records || _data.list || [] | 145 | const records = _data.datas || _data.records || _data.list || [] |
| @@ -149,9 +149,10 @@ export default { | @@ -149,9 +149,10 @@ export default { | ||
| 149 | }) | 149 | }) |
| 150 | } else if (this.source === 'orderAssoc') { | 150 | } else if (this.source === 'orderAssoc') { |
| 151 | console.log('orderAssoc_extra', extra) | 151 | console.log('orderAssoc_extra', extra) |
| 152 | - // 订单关联表(可撤销/变更的订货单) | 152 | + // 订单关联表(可撤销/变更的订货单、可发货的订货单) |
| 153 | + // 支持 订单编号&订货单位 模糊搜索 searchKey | ||
| 153 | const queryType = (extra && extra.queryType) || '' | 154 | const queryType = (extra && extra.queryType) || '' |
| 154 | - const params = { pageIndex, pageSize, orderNo: name, queryType } | 155 | + const params = { pageIndex, pageSize, searchKey: name, queryType } |
| 155 | return listCanRevokeOrChangeOrderInfo(params).then(res => { | 156 | return listCanRevokeOrChangeOrderInfo(params).then(res => { |
| 156 | const _data = res.data || {} | 157 | const _data = res.data || {} |
| 157 | const records = _data.datas || _data.records || _data.list || [] | 158 | const records = _data.datas || _data.records || _data.list || [] |
| @@ -233,13 +234,13 @@ export default { | @@ -233,13 +234,13 @@ export default { | ||
| 233 | .cancel { color: rgba(0,0,0,0.6); font-size: 28rpx; } | 234 | .cancel { color: rgba(0,0,0,0.6); font-size: 28rpx; } |
| 234 | .ok { color: $theme-primary; font-size: 28rpx; } | 235 | .ok { color: $theme-primary; font-size: 28rpx; } |
| 235 | .sheet-search { padding: 16rpx 24rpx; } | 236 | .sheet-search { padding: 16rpx 24rpx; } |
| 236 | -.sheet-body { | ||
| 237 | - flex: 1 1 auto; overflow-y: auto; padding: 24rpx; | 237 | +.sheet-body { |
| 238 | + flex: 1 1 auto; overflow-y: auto; padding: 24rpx; | ||
| 238 | background: #f3f3f3; | 239 | background: #f3f3f3; |
| 239 | } | 240 | } |
| 240 | .card { background: #fff; } | 241 | .card { background: #fff; } |
| 241 | -.card.selected { | ||
| 242 | - background-color: #fff; | 242 | +.card.selected { |
| 243 | + background-color: #fff; | ||
| 243 | position: relative; | 244 | position: relative; |
| 244 | &::after { | 245 | &::after { |
| 245 | content: ''; | 246 | content: ''; |
| @@ -656,6 +656,134 @@ | @@ -656,6 +656,134 @@ | ||
| 656 | "navigationBarBackgroundColor": "#ffffff", | 656 | "navigationBarBackgroundColor": "#ffffff", |
| 657 | "navigationBarTextStyle": "black" | 657 | "navigationBarTextStyle": "black" |
| 658 | } | 658 | } |
| 659 | + }, | ||
| 660 | + { | ||
| 661 | + "path": "pages/invoice/index", | ||
| 662 | + "style": { | ||
| 663 | + "navigationBarTitleText": "发货单", | ||
| 664 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 665 | + "navigationBarTextStyle": "black" | ||
| 666 | + } | ||
| 667 | + }, | ||
| 668 | + { | ||
| 669 | + "path": "pages/invoice/detail", | ||
| 670 | + "style": { | ||
| 671 | + "navigationBarTitleText": "发货单详情", | ||
| 672 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 673 | + "navigationBarTextStyle": "black" | ||
| 674 | + } | ||
| 675 | + }, | ||
| 676 | + { | ||
| 677 | + "path": "pages/invoice/fill", | ||
| 678 | + "style": { | ||
| 679 | + "navigationBarTitleText": "发货单填写实发数", | ||
| 680 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 681 | + "navigationBarTextStyle": "black" | ||
| 682 | + } | ||
| 683 | + }, | ||
| 684 | + { | ||
| 685 | + "path": "pages/delay_invoice/index", | ||
| 686 | + "style": { | ||
| 687 | + "navigationBarTitleText": "延期发货单", | ||
| 688 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 689 | + "navigationBarTextStyle": "black" | ||
| 690 | + } | ||
| 691 | + }, | ||
| 692 | + { | ||
| 693 | + "path": "pages/delay_invoice/detail", | ||
| 694 | + "style": { | ||
| 695 | + "navigationBarTitleText": "延期发货单详情", | ||
| 696 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 697 | + "navigationBarTextStyle": "black" | ||
| 698 | + } | ||
| 699 | + }, | ||
| 700 | + { | ||
| 701 | + "path": "pages/delay_invoice/modify", | ||
| 702 | + "style": { | ||
| 703 | + "navigationBarTitleText": "编辑延期发货单", | ||
| 704 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 705 | + "navigationBarTextStyle": "black" | ||
| 706 | + } | ||
| 707 | + }, | ||
| 708 | + { | ||
| 709 | + "path": "pages/draft_order/index", | ||
| 710 | + "style": { | ||
| 711 | + "navigationBarTitleText": "草稿要车单", | ||
| 712 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 713 | + "navigationBarTextStyle": "black" | ||
| 714 | + } | ||
| 715 | + }, | ||
| 716 | + { | ||
| 717 | + "path": "pages/draft_order/detail", | ||
| 718 | + "style": { | ||
| 719 | + "navigationBarTitleText": "草稿要车单详情", | ||
| 720 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 721 | + "navigationBarTextStyle": "black" | ||
| 722 | + } | ||
| 723 | + }, | ||
| 724 | + { | ||
| 725 | + "path": "pages/draft_order/modify", | ||
| 726 | + "style": { | ||
| 727 | + "navigationBarTitleText": "编辑草稿要车单", | ||
| 728 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 729 | + "navigationBarTextStyle": "black" | ||
| 730 | + } | ||
| 731 | + }, | ||
| 732 | + { | ||
| 733 | + "path": "pages/car_request_order/index", | ||
| 734 | + "style": { | ||
| 735 | + "navigationBarTitleText": "要车单", | ||
| 736 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 737 | + "navigationBarTextStyle": "black" | ||
| 738 | + } | ||
| 739 | + }, | ||
| 740 | + { | ||
| 741 | + "path": "pages/car_request_order/detail", | ||
| 742 | + "style": { | ||
| 743 | + "navigationBarTitleText": "要车单详情", | ||
| 744 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 745 | + "navigationBarTextStyle": "black" | ||
| 746 | + } | ||
| 747 | + }, | ||
| 748 | + { | ||
| 749 | + "path": "pages/replenishment_order/index", | ||
| 750 | + "style": { | ||
| 751 | + "navigationBarTitleText": "补货单", | ||
| 752 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 753 | + "navigationBarTextStyle": "black" | ||
| 754 | + } | ||
| 755 | + }, | ||
| 756 | + { | ||
| 757 | + "path": "pages/replenishment_order/add", | ||
| 758 | + "style": { | ||
| 759 | + "navigationBarTitleText": "新增补货单", | ||
| 760 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 761 | + "navigationBarTextStyle": "black" | ||
| 762 | + } | ||
| 763 | + }, | ||
| 764 | + { | ||
| 765 | + "path": "pages/replenishment_order/detail", | ||
| 766 | + "style": { | ||
| 767 | + "navigationBarTitleText": "补货单详情", | ||
| 768 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 769 | + "navigationBarTextStyle": "black" | ||
| 770 | + } | ||
| 771 | + }, | ||
| 772 | + { | ||
| 773 | + "path": "pages/replenishment_order/modify", | ||
| 774 | + "style": { | ||
| 775 | + "navigationBarTitleText": "编辑补货单", | ||
| 776 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 777 | + "navigationBarTextStyle": "black" | ||
| 778 | + } | ||
| 779 | + }, | ||
| 780 | + { | ||
| 781 | + "path": "pages/replenishment_order/fill", | ||
| 782 | + "style": { | ||
| 783 | + "navigationBarTitleText": "填写补货时间", | ||
| 784 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 785 | + "navigationBarTextStyle": "black" | ||
| 786 | + } | ||
| 659 | } | 787 | } |
| 660 | ], | 788 | ], |
| 661 | "subPackages": [ | 789 | "subPackages": [ |
pages/car_request_order/detail.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="page"> | ||
| 3 | + <scroll-view class="scroll" scroll-y> | ||
| 4 | + <view class="detail-page"> | ||
| 5 | + <view class="section"> | ||
| 6 | + <text class="row company">{{ form.orderingUnitName }}</text> | ||
| 7 | + <view class="row"><text class="label">要车日期</text><text class="value">{{ form.requestCarDate }}</text></view> | ||
| 8 | + <view class="row"><text class="label">要车办事处</text><text class="value">{{ form.deptName }}</text></view> | ||
| 9 | + <view class="row"><text class="label">计划装货日期</text><text class="value">{{ form.deliveryDate }}</text></view> | ||
| 10 | + <view class="row"><text class="label">装货厂别</text><text class="value">{{ form.workshopName }}</text></view> | ||
| 11 | + <view class="row"><text class="label">订单编号</text><text class="value">{{ form.orderNo }}</text></view> | ||
| 12 | + <view class="row"><text class="label">卸货地点</text><text class="value">{{ form.destination }}</text></view> | ||
| 13 | + <view class="row"><text class="label">计划吨位(kg)</text><text class="value">{{ form.quantity }}</text></view> | ||
| 14 | + <view class="row"><text class="label">接货人/联络人</text><text class="value">{{ form.consignee }}</text></view> | ||
| 15 | + <view class="row"><text class="label">联系电话</text><text class="value">{{ form.phone }}</text></view> | ||
| 16 | + <view class="row"><text class="label">装货时间</text><text class="value">{{ form.loadingTime }}</text></view> | ||
| 17 | + <view class="row"><text class="label">外办审核人</text><text class="value">{{ form.externalAuditorName }}</text></view> | ||
| 18 | + <view class="row"><text class="label">经营办审核人</text><text class="value">{{ form.businessOfficeAuditorName }}</text></view> | ||
| 19 | + <view class="row"><text class="label">运作科审核人</text><text class="value">{{ form.operationsDepartmentAuditorName }}</text></view> | ||
| 20 | + <view class="row"><text class="label">回货计划安排</text><text class="value">{{ form.returnPlanArrangement }}</text></view> | ||
| 21 | + <view class="row"><text class="label">特殊需求、其他等</text><text class="value">{{ form.other }}</text></view> | ||
| 22 | + <view class="row"><text class="label">装货特别要求/需求</text><text class="value">{{ form.specialLoadingRequirement }}</text></view> | ||
| 23 | + </view> | ||
| 24 | + </view> | ||
| 25 | + </scroll-view> | ||
| 26 | + </view> | ||
| 27 | +</template> | ||
| 28 | + | ||
| 29 | +<script> | ||
| 30 | +import { getDetailApi } from '@/api/car_request_order.js' | ||
| 31 | + | ||
| 32 | +export default { | ||
| 33 | + name: 'CarRequestOrderDetail', | ||
| 34 | + data() { | ||
| 35 | + return { | ||
| 36 | + form: {}, | ||
| 37 | + } | ||
| 38 | + }, | ||
| 39 | + computed: { | ||
| 40 | + }, | ||
| 41 | + onLoad(query) { | ||
| 42 | + const id = (query && (query.id || query.code)) || '' | ||
| 43 | + if (id) this.loadDetail(id) | ||
| 44 | + }, | ||
| 45 | + methods: { | ||
| 46 | + async loadDetail(id) { | ||
| 47 | + try { | ||
| 48 | + const res = await getDetailApi(id) | ||
| 49 | + this.form = res.data || {} | ||
| 50 | + } catch (e) { | ||
| 51 | + this.form = {} | ||
| 52 | + } | ||
| 53 | + } | ||
| 54 | + } | ||
| 55 | +} | ||
| 56 | +</script> | ||
| 57 | + | ||
| 58 | +<style lang="scss" scoped> | ||
| 59 | +.page { | ||
| 60 | + display: flex; | ||
| 61 | + flex-direction: column; | ||
| 62 | + height: 100vh; | ||
| 63 | +} | ||
| 64 | + | ||
| 65 | +.scroll { | ||
| 66 | + flex: 1; | ||
| 67 | + background: #f3f3f3; | ||
| 68 | +} | ||
| 69 | + | ||
| 70 | +.detail-page { | ||
| 71 | +} | ||
| 72 | + | ||
| 73 | +.section { | ||
| 74 | + padding: 32rpx; | ||
| 75 | + background: #fff; | ||
| 76 | + margin-bottom: 20rpx; | ||
| 77 | + position: relative; | ||
| 78 | +} | ||
| 79 | + | ||
| 80 | +.row { | ||
| 81 | + display: flex; | ||
| 82 | + margin-bottom: 28rpx; | ||
| 83 | + | ||
| 84 | + &:last-child { | ||
| 85 | + margin-bottom: 0; | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + &.company { | ||
| 89 | + font-size: 36rpx; | ||
| 90 | + font-weight: 600; | ||
| 91 | + color: rgba(0, 0, 0, 0.9); | ||
| 92 | + padding-top: 10rpx; | ||
| 93 | + margin-bottom: 32rpx; | ||
| 94 | + line-height: 50rpx; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + .label { | ||
| 98 | + width: 240rpx; | ||
| 99 | + line-height: 32rpx; | ||
| 100 | + font-size: 28rpx; | ||
| 101 | + color: rgba(0, 0, 0, 0.6); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + .value { | ||
| 105 | + flex: 1; | ||
| 106 | + line-height: 32rpx; | ||
| 107 | + font-size: 28rpx; | ||
| 108 | + color: rgba(0, 0, 0, 0.9); | ||
| 109 | + text-align: right; | ||
| 110 | + word-break: break-all; | ||
| 111 | + } | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +.title-header { | ||
| 115 | + background-color: #fff; | ||
| 116 | + display: flex; | ||
| 117 | + align-items: center; | ||
| 118 | + padding: 32rpx 32rpx 22rpx; | ||
| 119 | + border-bottom: 1rpx dashed #f0f0f0; | ||
| 120 | + | ||
| 121 | + &_icon { | ||
| 122 | + width: 32rpx; | ||
| 123 | + height: 28rpx; | ||
| 124 | + margin-right: 16rpx; | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + span { | ||
| 128 | + color: rgba(0, 0, 0, 0.9); | ||
| 129 | + font-size: 32rpx; | ||
| 130 | + line-height: 44rpx; | ||
| 131 | + font-weight: 600; | ||
| 132 | + } | ||
| 133 | +} | ||
| 134 | +</style> |
pages/car_request_order/index.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="page"> | ||
| 3 | + <view class="dev-list-fixed"> | ||
| 4 | + <view class="search-row"> | ||
| 5 | + <uni-search-bar v-model="searchKeyword" radius="6" placeholder="请输入客户名称或者订单编号" clearButton="auto" | ||
| 6 | + cancelButton="none" bgColor="#F3F3F3" textColor="rgba(0,0,0,0.4)" @confirm="search" | ||
| 7 | + @input="onSearchInput" /> | ||
| 8 | + <view class="tool-icons"> | ||
| 9 | + <image class="tool-icon" src="/static/images/dev_manage/filter_icon.png" @click="openFilter" /> | ||
| 10 | + </view> | ||
| 11 | + </view> | ||
| 12 | + </view> | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + <!-- 列表卡片组件 --> | ||
| 16 | + <view class="list-box"> | ||
| 17 | + <card-list ref="cardRef" :fetch-fn="fetchList" :query="query" :extra="extraParams" row-key="id" | ||
| 18 | + :enable-refresh="true" :enable-load-more="true" @loaded="onCardLoaded" @error="onCardError"> | ||
| 19 | + <template v-slot="{ item, selected }"> | ||
| 20 | + <view class="card" @click.stop="onCardClick(item)"> | ||
| 21 | + <view class="card-header"> | ||
| 22 | + <text class="title omit2">{{ item.orderingUnitName }}</text> | ||
| 23 | + </view> | ||
| 24 | + <view class="info-row"> | ||
| 25 | + <text>订单编号</text><text>{{ item.orderNo || '-' }}</text> | ||
| 26 | + </view> | ||
| 27 | + <view class="info-row"> | ||
| 28 | + <text>要车办事处</text><text>{{ item.deptName || '-' }}</text> | ||
| 29 | + </view> | ||
| 30 | + <view class="info-row"> | ||
| 31 | + <text>装货厂别</text><text>{{ item.workshopName || '-' }}</text> | ||
| 32 | + </view> | ||
| 33 | + <view class="info-row"> | ||
| 34 | + <text>要车日期</text><text>{{ item.requestCarDate || '-' }}</text> | ||
| 35 | + </view> | ||
| 36 | + </view> | ||
| 37 | + </template> | ||
| 38 | + </card-list> | ||
| 39 | + </view> | ||
| 40 | + | ||
| 41 | + | ||
| 42 | + | ||
| 43 | + <!-- 筛选弹框 --> | ||
| 44 | + <filter-modal :visible.sync="filterVisible" :value.sync="filterForm" title="筛选" @reset="onFilterReset" | ||
| 45 | + @confirm="onFilterConfirm"> | ||
| 46 | + <template v-slot="{ model }"> | ||
| 47 | + <view class="filter-form"> | ||
| 48 | + <view class="form-item"> | ||
| 49 | + <view class="label">办事处</view> | ||
| 50 | + <uni-easyinput v-model="model.deptName" placeholder="请输入办事处" :inputBorder="false" | ||
| 51 | + placeholderStyle="font-size:14px" @input="onDeptNameInput" /> | ||
| 52 | + </view> | ||
| 53 | + | ||
| 54 | + <view class="form-item"> | ||
| 55 | + <view class="label">装货厂别</view> | ||
| 56 | + <uni-data-checkbox mode="tag" :multiple="false" :value-field="'value'" :text-field="'text'" | ||
| 57 | + v-model="model.workshopId" @change="onWorkshopChange" :localdata="workshopOptions" /> | ||
| 58 | + </view> | ||
| 59 | + | ||
| 60 | + <view class="form-item"> | ||
| 61 | + <view class="label">要车日期</view> | ||
| 62 | + <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" @change="onDateChange($event, model)" /> | ||
| 63 | + </view> | ||
| 64 | + </view> | ||
| 65 | + </template> | ||
| 66 | + </filter-modal> | ||
| 67 | + </view> | ||
| 68 | +</template> | ||
| 69 | + | ||
| 70 | +<script> | ||
| 71 | +import CardList from '@/components/card/index.vue' | ||
| 72 | +import FilterModal from '@/components/filter/index.vue' | ||
| 73 | +import { workshopQueryApi } from '@/api/devManage.js' | ||
| 74 | +import SingleSelectSheet from '@/components/single-select/index.vue' | ||
| 75 | +import { | ||
| 76 | + queryApi | ||
| 77 | +} from '@/api/car_request_order.js' | ||
| 78 | +import { | ||
| 79 | + getDicByCodes | ||
| 80 | +} from '@/utils/dic' | ||
| 81 | +import { | ||
| 82 | + getDicName | ||
| 83 | +} from '@/utils/dic.js' | ||
| 84 | + | ||
| 85 | +export default { | ||
| 86 | + components: { | ||
| 87 | + CardList, | ||
| 88 | + FilterModal, | ||
| 89 | + SingleSelectSheet | ||
| 90 | + }, | ||
| 91 | + data() { | ||
| 92 | + return { | ||
| 93 | + searchKeyword: '', | ||
| 94 | + searchKeywordDebounced: '', | ||
| 95 | + tabs: [], | ||
| 96 | + // 给到 card 的筛选值 | ||
| 97 | + query: { | ||
| 98 | + status: '', | ||
| 99 | + companySuggestedCategory: '', | ||
| 100 | + dateRange: [] | ||
| 101 | + }, | ||
| 102 | + extraParams: {}, | ||
| 103 | + | ||
| 104 | + // 批量选择 | ||
| 105 | + rowKey: 'id', | ||
| 106 | + currentItems: [], | ||
| 107 | + | ||
| 108 | + // 筛选弹框 | ||
| 109 | + filterVisible: false, | ||
| 110 | + filterForm: { | ||
| 111 | + status: '', | ||
| 112 | + dateRange: [] | ||
| 113 | + }, | ||
| 114 | + dicOptions: { | ||
| 115 | + SHIP_ORDER_STATUS: [], | ||
| 116 | + }, | ||
| 117 | + statusLocal: [], | ||
| 118 | + workshopOptions: [], | ||
| 119 | + } | ||
| 120 | + }, | ||
| 121 | + computed: { | ||
| 122 | + extraCombined() { | ||
| 123 | + return { | ||
| 124 | + searchKey: this.searchKeywordDebounced || undefined | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | + }, | ||
| 128 | + watch: { | ||
| 129 | + extraCombined: { | ||
| 130 | + deep: true, | ||
| 131 | + handler(v) { | ||
| 132 | + this.extraParams = v | ||
| 133 | + }, | ||
| 134 | + immediate: true | ||
| 135 | + }, | ||
| 136 | + | ||
| 137 | + }, | ||
| 138 | + created() { | ||
| 139 | + this.loadWorkshopOptions() | ||
| 140 | + }, | ||
| 141 | + onLoad() { }, | ||
| 142 | + // 页面触底兜底:当页面自身滚动到底部时,转调卡片组件加载更多 | ||
| 143 | + onReachBottom() { | ||
| 144 | + if (this.$refs && this.$refs.cardRef && this.$refs.cardRef.onLoadMore) { | ||
| 145 | + this.$refs.cardRef.onLoadMore() | ||
| 146 | + } | ||
| 147 | + }, | ||
| 148 | + beforeDestroy() { | ||
| 149 | + if (this.searchDebounceTimer) { | ||
| 150 | + clearTimeout(this.searchDebounceTimer) | ||
| 151 | + this.searchDebounceTimer = null | ||
| 152 | + } | ||
| 153 | + }, | ||
| 154 | + methods: { | ||
| 155 | + async loadWorkshopOptions() { | ||
| 156 | + try { | ||
| 157 | + const res = await workshopQueryApi({ pageIndex: 1, pageSize: 9999 }) | ||
| 158 | + const list = (res && res.data && res.data.datas) || [] | ||
| 159 | + this.workshopOptions = list.map(it => ({ text: it.name || it.workshopName || '', value: it.id || it.workshopId || '' })) | ||
| 160 | + } catch (e) { | ||
| 161 | + this.workshopOptions = [] | ||
| 162 | + } | ||
| 163 | + }, | ||
| 164 | + onCardLoaded({ | ||
| 165 | + items | ||
| 166 | + }) { | ||
| 167 | + this.currentItems = items | ||
| 168 | + }, | ||
| 169 | + onCardError() { | ||
| 170 | + uni.showToast({ | ||
| 171 | + title: '列表加载失败', | ||
| 172 | + icon: 'none' | ||
| 173 | + }) | ||
| 174 | + }, | ||
| 175 | + // 输入实时搜索:1200ms 防抖,仅在停止输入超过阈值后刷新 | ||
| 176 | + onSearchInput(val) { | ||
| 177 | + if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer) | ||
| 178 | + this.searchDebounceTimer = setTimeout(() => { | ||
| 179 | + this.searchKeywordDebounced = this.searchKeyword | ||
| 180 | + this.searchDebounceTimer = null | ||
| 181 | + }, 1200) | ||
| 182 | + }, | ||
| 183 | + // uni-search-bar 确认搜索:更新关键字并触发 CardList 刷新 | ||
| 184 | + search(e) { | ||
| 185 | + const val = e && e.value != null ? e.value : this.searchKeyword | ||
| 186 | + this.searchKeyword = val | ||
| 187 | + this.searchKeywordDebounced = val | ||
| 188 | + }, | ||
| 189 | + onAdd() { | ||
| 190 | + uni.navigateTo({ | ||
| 191 | + url: '/pages/credit_manage/add' | ||
| 192 | + }) | ||
| 193 | + }, | ||
| 194 | + openFilter() { | ||
| 195 | + this.filterVisible = true | ||
| 196 | + }, | ||
| 197 | + onFilterReset(payload) { | ||
| 198 | + this.filterForm = payload | ||
| 199 | + }, | ||
| 200 | + onFilterConfirm(payload) { | ||
| 201 | + if ((payload.status === '' || payload.status == null) && this.filterForm.status !== '') { | ||
| 202 | + payload.status = this.filterForm.status | ||
| 203 | + } | ||
| 204 | + this.query = { | ||
| 205 | + ...payload | ||
| 206 | + } | ||
| 207 | + }, | ||
| 208 | + onStatusChange(e) { | ||
| 209 | + const raw = e && e.detail && e.detail.value !== undefined ? | ||
| 210 | + e.detail.value : | ||
| 211 | + (e && e.value !== undefined ? e.value : '') | ||
| 212 | + this.filterForm.status = raw | ||
| 213 | + }, | ||
| 214 | + | ||
| 215 | + // 列表接口(真实请求) | ||
| 216 | + fetchList({ | ||
| 217 | + pageIndex, | ||
| 218 | + pageSize, | ||
| 219 | + query, | ||
| 220 | + extra | ||
| 221 | + }) { | ||
| 222 | + const params = { | ||
| 223 | + pageIndex, | ||
| 224 | + pageSize, | ||
| 225 | + ...extra, | ||
| 226 | + ...query | ||
| 227 | + } | ||
| 228 | + if (Array.isArray(params.dateRange) && params.dateRange.length === 2) { | ||
| 229 | + params.requestCarDateStart = params.dateRange[0] | ||
| 230 | + params.requestCarDateEnd = params.dateRange[1] | ||
| 231 | + delete params.dateRange | ||
| 232 | + } | ||
| 233 | + if (this.searchKeywordDebounced) { | ||
| 234 | + params.searchKey = this.searchKeywordDebounced | ||
| 235 | + } | ||
| 236 | + return queryApi(params) | ||
| 237 | + .then(res => { | ||
| 238 | + const _data = res.data || {}; | ||
| 239 | + const records = _data.datas || []; | ||
| 240 | + const totalCount = _data.totalCount || 0; | ||
| 241 | + const hasNext = _data.hasNext || false | ||
| 242 | + return { | ||
| 243 | + records, | ||
| 244 | + totalCount, | ||
| 245 | + hasNext | ||
| 246 | + } | ||
| 247 | + }) | ||
| 248 | + .catch(err => { | ||
| 249 | + console.error('fetchList error', err) | ||
| 250 | + this.onCardError() | ||
| 251 | + return { | ||
| 252 | + records: [], | ||
| 253 | + totalCount: 0, | ||
| 254 | + hasNext: false | ||
| 255 | + } | ||
| 256 | + }) | ||
| 257 | + }, | ||
| 258 | + onCardClick(item) { | ||
| 259 | + const id = (item && (item.id || item.code)) || '' | ||
| 260 | + if (!id) return | ||
| 261 | + const query = '?id=' + encodeURIComponent(id) | ||
| 262 | + uni.navigateTo({ | ||
| 263 | + url: '/pages/car_request_order/detail' + query | ||
| 264 | + }) | ||
| 265 | + }, | ||
| 266 | + getDicName: getDicName, | ||
| 267 | + getCategoryClass(categoryName) { | ||
| 268 | + if (!categoryName) return '' | ||
| 269 | + if (categoryName.includes('A') || categoryName.includes('a')) { | ||
| 270 | + return 'category_A' | ||
| 271 | + } else if (categoryName.includes('B') || categoryName.includes('b')) { | ||
| 272 | + return 'category_B' | ||
| 273 | + } else if (categoryName.includes('C') || categoryName.includes('c')) { | ||
| 274 | + return 'category_C' | ||
| 275 | + } else if (categoryName.includes('D') || categoryName.includes('d')) { | ||
| 276 | + return 'category_D' | ||
| 277 | + } | ||
| 278 | + }, | ||
| 279 | + onDeptNameInput(val) { | ||
| 280 | + this.filterForm.deptName = val | ||
| 281 | + }, | ||
| 282 | + onWorkshopChange(e) { | ||
| 283 | + const raw = e && e.detail && e.detail.value !== undefined ? e.detail.value : (e && e.value !== undefined ? e.value : '') | ||
| 284 | + this.filterForm.workshopId = raw | ||
| 285 | + const match = (this.workshopOptions || []).find(o => String(o.value) === String(raw)) | ||
| 286 | + this.filterForm.workshopIdName = match ? (match.text || '') : '' | ||
| 287 | + }, | ||
| 288 | + onDateChange(e, model) { | ||
| 289 | + // 确保同步更新 filterForm,避免数据不同步 | ||
| 290 | + this.filterForm.dateRange = e | ||
| 291 | + }, | ||
| 292 | + | ||
| 293 | + } | ||
| 294 | +} | ||
| 295 | +</script> | ||
| 296 | + | ||
| 297 | +<style lang="scss" scoped> | ||
| 298 | +.page { | ||
| 299 | + display: flex; | ||
| 300 | + flex-direction: column; | ||
| 301 | + height: 100vh; | ||
| 302 | +} | ||
| 303 | + | ||
| 304 | +.dev-list-fixed { | ||
| 305 | + position: fixed; | ||
| 306 | + top: 96rpx; | ||
| 307 | + left: 0; | ||
| 308 | + right: 0; | ||
| 309 | + z-index: 2; | ||
| 310 | + background: #fff; | ||
| 311 | + | ||
| 312 | + .search-row { | ||
| 313 | + display: flex; | ||
| 314 | + align-items: center; | ||
| 315 | + padding: 16rpx 32rpx; | ||
| 316 | + | ||
| 317 | + .uni-searchbar { | ||
| 318 | + padding: 0; | ||
| 319 | + flex: 1; | ||
| 320 | + } | ||
| 321 | + | ||
| 322 | + .tool-icons { | ||
| 323 | + display: flex; | ||
| 324 | + | ||
| 325 | + .tool-icon { | ||
| 326 | + width: 48rpx; | ||
| 327 | + height: 48rpx; | ||
| 328 | + display: block; | ||
| 329 | + margin-left: 32rpx; | ||
| 330 | + } | ||
| 331 | + } | ||
| 332 | + } | ||
| 333 | + | ||
| 334 | +} | ||
| 335 | + | ||
| 336 | +/* 仅当前页覆盖 uni-search-bar 盒子高度 */ | ||
| 337 | +::v-deep .uni-searchbar__box { | ||
| 338 | + height: 80rpx !important; | ||
| 339 | + justify-content: start; | ||
| 340 | + | ||
| 341 | + .uni-searchbar__box-search-input { | ||
| 342 | + font-size: 32rpx !important; | ||
| 343 | + } | ||
| 344 | +} | ||
| 345 | + | ||
| 346 | +.list-box { | ||
| 347 | + flex: 1; | ||
| 348 | + padding-top: 140rpx; | ||
| 349 | + | ||
| 350 | + &.pad-batch { | ||
| 351 | + padding-bottom: 144rpx; | ||
| 352 | + } | ||
| 353 | + | ||
| 354 | + .card { | ||
| 355 | + position: relative; | ||
| 356 | + } | ||
| 357 | + | ||
| 358 | + .card-header { | ||
| 359 | + margin-bottom: 28rpx; | ||
| 360 | + position: relative; | ||
| 361 | + | ||
| 362 | + .title { | ||
| 363 | + font-size: 36rpx; | ||
| 364 | + font-weight: 600; | ||
| 365 | + line-height: 50rpx; | ||
| 366 | + color: rgba(0, 0, 0, 0.9); | ||
| 367 | + width: 578rpx; | ||
| 368 | + } | ||
| 369 | + | ||
| 370 | + .status-box { | ||
| 371 | + position: absolute; | ||
| 372 | + top: -32rpx; | ||
| 373 | + right: -12rpx; | ||
| 374 | + | ||
| 375 | + .status { | ||
| 376 | + display: block; | ||
| 377 | + height: 48rpx; | ||
| 378 | + line-height: 48rpx; | ||
| 379 | + font-weight: 600; | ||
| 380 | + color: #fff; | ||
| 381 | + font-size: 24rpx; | ||
| 382 | + padding: 0 14rpx; | ||
| 383 | + border-radius: 6rpx; | ||
| 384 | + margin-bottom: 8rpx; | ||
| 385 | + | ||
| 386 | + // 已签收 | ||
| 387 | + &.status_DELIVERED { | ||
| 388 | + background: #E7E7E7; | ||
| 389 | + color: rgba(0, 0, 0, 0.9); | ||
| 390 | + } | ||
| 391 | + | ||
| 392 | + // 已发货 | ||
| 393 | + &.status_SHIPMENTS { | ||
| 394 | + background: #2BA471; | ||
| 395 | + } | ||
| 396 | + | ||
| 397 | + // 未发货 | ||
| 398 | + &.status_UN_SHIPMENTS { | ||
| 399 | + background: #D54941; | ||
| 400 | + } | ||
| 401 | + } | ||
| 402 | + | ||
| 403 | + .status2 { | ||
| 404 | + display: block; | ||
| 405 | + font-weight: 600; | ||
| 406 | + line-height: 48rpx; | ||
| 407 | + height: 48rpx; | ||
| 408 | + color: #fff; | ||
| 409 | + font-size: 24rpx; | ||
| 410 | + padding: 0 14rpx; | ||
| 411 | + border-radius: 6rpx; | ||
| 412 | + background: #E7E7E7; | ||
| 413 | + color: rgba(0, 0, 0, 0.9); | ||
| 414 | + | ||
| 415 | + } | ||
| 416 | + | ||
| 417 | + } | ||
| 418 | + | ||
| 419 | + } | ||
| 420 | + | ||
| 421 | + .info-row { | ||
| 422 | + display: flex; | ||
| 423 | + align-items: center; | ||
| 424 | + color: rgba(0, 0, 0, 0.6); | ||
| 425 | + font-size: 28rpx; | ||
| 426 | + margin-bottom: 24rpx; | ||
| 427 | + | ||
| 428 | + &:last-child { | ||
| 429 | + margin-bottom: 0; | ||
| 430 | + } | ||
| 431 | + | ||
| 432 | + text { | ||
| 433 | + width: 60%; | ||
| 434 | + line-height: 32rpx; | ||
| 435 | + | ||
| 436 | + &:last-child { | ||
| 437 | + color: rgba(0, 0, 0, 0.9); | ||
| 438 | + width: 40%; | ||
| 439 | + } | ||
| 440 | + | ||
| 441 | + &.category { | ||
| 442 | + display: inline-block; | ||
| 443 | + padding: 4rpx 12rpx; | ||
| 444 | + border-radius: 6rpx; | ||
| 445 | + font-size: 24rpx; | ||
| 446 | + width: auto; | ||
| 447 | + | ||
| 448 | + &.category_A { | ||
| 449 | + background: #FFF0ED; | ||
| 450 | + color: #D54941; | ||
| 451 | + } | ||
| 452 | + | ||
| 453 | + &.category_B { | ||
| 454 | + background: #FFF1E9; | ||
| 455 | + color: #E37318; | ||
| 456 | + } | ||
| 457 | + | ||
| 458 | + &.category_C { | ||
| 459 | + background: #F2F3FF; | ||
| 460 | + color: $theme-primary; | ||
| 461 | + } | ||
| 462 | + | ||
| 463 | + &.category_D { | ||
| 464 | + background: #E3F9E9; | ||
| 465 | + color: #2BA471; | ||
| 466 | + } | ||
| 467 | + } | ||
| 468 | + } | ||
| 469 | + | ||
| 470 | + } | ||
| 471 | +} | ||
| 472 | + | ||
| 473 | +.filter-form { | ||
| 474 | + .form-item { | ||
| 475 | + margin-bottom: 24rpx; | ||
| 476 | + } | ||
| 477 | + | ||
| 478 | + .label { | ||
| 479 | + margin-bottom: 20rpx; | ||
| 480 | + color: rgba(0, 0, 0, 0.9); | ||
| 481 | + height: 44rpx; | ||
| 482 | + line-height: 44rpx; | ||
| 483 | + font-size: 30rpx; | ||
| 484 | + } | ||
| 485 | + | ||
| 486 | + .uni-easyinput { | ||
| 487 | + border: 1rpx solid #f3f3f3; | ||
| 488 | + } | ||
| 489 | + | ||
| 490 | +} | ||
| 491 | + | ||
| 492 | +/* 深度覆盖 uni-data-checkbox(mode=tag)内部的 tag 展示与间距 */ | ||
| 493 | +::v-deep .filter-form .uni-data-checklist .checklist-group { | ||
| 494 | + .checklist-box { | ||
| 495 | + &.is--tag { | ||
| 496 | + width: 212rpx; | ||
| 497 | + margin-top: 0; | ||
| 498 | + margin-bottom: 24rpx; | ||
| 499 | + margin-right: 24rpx; | ||
| 500 | + height: 80rpx; | ||
| 501 | + padding: 0; | ||
| 502 | + border-radius: 12rpx; | ||
| 503 | + background-color: #f3f3f3; | ||
| 504 | + border-color: #f3f3f3; | ||
| 505 | + | ||
| 506 | + &:nth-child(3n) { | ||
| 507 | + margin-right: 0; | ||
| 508 | + } | ||
| 509 | + | ||
| 510 | + .checklist-content { | ||
| 511 | + display: flex; | ||
| 512 | + justify-content: center; | ||
| 513 | + } | ||
| 514 | + | ||
| 515 | + .checklist-text { | ||
| 516 | + color: rgba(0, 0, 0, 0.9); | ||
| 517 | + font-size: 28rpx; | ||
| 518 | + } | ||
| 519 | + } | ||
| 520 | + | ||
| 521 | + &.is-checked { | ||
| 522 | + background-color: $theme-primary-plain-bg !important; | ||
| 523 | + border-color: $theme-primary-plain-bg !important; | ||
| 524 | + | ||
| 525 | + .checklist-text { | ||
| 526 | + color: $theme-primary !important; | ||
| 527 | + } | ||
| 528 | + } | ||
| 529 | + } | ||
| 530 | + | ||
| 531 | +} | ||
| 532 | +</style> |
| @@ -393,7 +393,8 @@ export default { | @@ -393,7 +393,8 @@ export default { | ||
| 393 | const v = Number(it && it.quantity) | 393 | const v = Number(it && it.quantity) |
| 394 | return acc + (isNaN(v) ? 0 : v) | 394 | return acc + (isNaN(v) ? 0 : v) |
| 395 | }, 0) | 395 | }, 0) |
| 396 | - this.form.afterTotalQuantity = sum | 396 | + const fixedSum = Number(sum.toFixed(2)) |
| 397 | + this.form.afterTotalQuantity = fixedSum | ||
| 397 | }, | 398 | }, |
| 398 | } | 399 | } |
| 399 | } | 400 | } |
| @@ -622,7 +623,6 @@ export default { | @@ -622,7 +623,6 @@ export default { | ||
| 622 | color: rgba(0, 0, 0, 0.9); | 623 | color: rgba(0, 0, 0, 0.9); |
| 623 | padding-bottom: 16rpx; | 624 | padding-bottom: 16rpx; |
| 624 | margin-bottom: 24rpx; | 625 | margin-bottom: 24rpx; |
| 625 | - ; | ||
| 626 | border-bottom: 1px dashed #E7E7E7; | 626 | border-bottom: 1px dashed #E7E7E7; |
| 627 | } | 627 | } |
| 628 | 628 | ||
| @@ -635,15 +635,16 @@ export default { | @@ -635,15 +635,16 @@ export default { | ||
| 635 | width: 180rpx; | 635 | width: 180rpx; |
| 636 | margin-right: 14rpx; | 636 | margin-right: 14rpx; |
| 637 | color: rgba(0, 0, 0, 0.6); | 637 | color: rgba(0, 0, 0, 0.6); |
| 638 | - font-size: 28rpx; | 638 | + font-size: 32rpx; |
| 639 | } | 639 | } |
| 640 | 640 | ||
| 641 | .value { | 641 | .value { |
| 642 | flex: 1; | 642 | flex: 1; |
| 643 | color: rgba(0, 0, 0, 0.9); | 643 | color: rgba(0, 0, 0, 0.9); |
| 644 | - font-size: 28rpx; | 644 | + font-size: 32rpx; |
| 645 | white-space: pre-wrap; | 645 | white-space: pre-wrap; |
| 646 | word-break: break-all; | 646 | word-break: break-all; |
| 647 | + font-weight: 600; | ||
| 647 | } | 648 | } |
| 648 | } | 649 | } |
| 649 | } | 650 | } |
| @@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
| 24 | <view class="mgb10"> | 24 | <view class="mgb10"> |
| 25 | <Product title="变更后" mode="view" :list="form.afterChangeSpecList" :totalQuantity="form.afterTotalQuantity || 0" /> | 25 | <Product title="变更后" mode="view" :list="form.afterChangeSpecList" :totalQuantity="form.afterTotalQuantity || 0" /> |
| 26 | </view> | 26 | </view> |
| 27 | - | 27 | + |
| 28 | <view class="section"> | 28 | <view class="section"> |
| 29 | <view class="row"><text class="label">价格表编号</text><text class="value">{{ form.priceListNo }}</text></view> | 29 | <view class="row"><text class="label">价格表编号</text><text class="value">{{ form.priceListNo }}</text></view> |
| 30 | <view class="row"><text class="label">开票情况</text><text class="value">{{ form.invoicingStatus }}</text></view> | 30 | <view class="row"><text class="label">开票情况</text><text class="value">{{ form.invoicingStatus }}</text></view> |
| @@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
| 34 | <view v-if="form.executionStandard === 'OTHER'" class="row"><text class="label">标准</text><text class="value">{{ form.executionStandardRemarks }}</text></view> | 34 | <view v-if="form.executionStandard === 'OTHER'" class="row"><text class="label">标准</text><text class="value">{{ form.executionStandardRemarks }}</text></view> |
| 35 | <view class="row"><text class="label">变更说明</text><text class="value">{{ form.changeDescription }}</text></view> | 35 | <view class="row"><text class="label">变更说明</text><text class="value">{{ form.changeDescription }}</text></view> |
| 36 | </view> | 36 | </view> |
| 37 | - | 37 | + |
| 38 | <view class="title-header"> | 38 | <view class="title-header"> |
| 39 | <image class="title-header_icon" src="/static/images/title.png" /> | 39 | <image class="title-header_icon" src="/static/images/title.png" /> |
| 40 | <span>具体质量要求</span> | 40 | <span>具体质量要求</span> |
| @@ -171,7 +171,7 @@ export default { | @@ -171,7 +171,7 @@ export default { | ||
| 171 | uni.showToast({ title: '已确认变更', icon: 'none' }) | 171 | uni.showToast({ title: '已确认变更', icon: 'none' }) |
| 172 | setTimeout(() => { uni.redirectTo({ url: '/pages/change_list/index' }) }, 300) | 172 | setTimeout(() => { uni.redirectTo({ url: '/pages/change_list/index' }) }, 300) |
| 173 | }).catch(() => { | 173 | }).catch(() => { |
| 174 | - uni.showToast({ title: '确认变更失败', icon: 'none' }) | 174 | + uni.showToast({ title: '确认变更失败', icon: 'none' }) |
| 175 | }) | 175 | }) |
| 176 | } | 176 | } |
| 177 | } | 177 | } |
| @@ -289,6 +289,7 @@ export default { | @@ -289,6 +289,7 @@ export default { | ||
| 289 | 289 | ||
| 290 | .label { | 290 | .label { |
| 291 | max-width: 420rpx; | 291 | max-width: 420rpx; |
| 292 | + margin-right: 20rpx; | ||
| 292 | line-height: 32rpx; | 293 | line-height: 32rpx; |
| 293 | font-size: 28rpx; | 294 | font-size: 28rpx; |
| 294 | color: rgba(0, 0, 0, 0.6); | 295 | color: rgba(0, 0, 0, 0.6); |
| @@ -300,6 +301,8 @@ export default { | @@ -300,6 +301,8 @@ export default { | ||
| 300 | font-size: 28rpx; | 301 | font-size: 28rpx; |
| 301 | color: rgba(0, 0, 0, 0.9); | 302 | color: rgba(0, 0, 0, 0.9); |
| 302 | text-align: right; | 303 | text-align: right; |
| 304 | + white-space: pre-wrap; | ||
| 305 | + word-break: break-all; | ||
| 303 | 306 | ||
| 304 | &.act { | 307 | &.act { |
| 305 | color: $theme-primary; | 308 | color: $theme-primary; |
| @@ -228,7 +228,7 @@ export default { | @@ -228,7 +228,7 @@ export default { | ||
| 228 | 228 | ||
| 229 | .list-box { | 229 | .list-box { |
| 230 | flex: 1; | 230 | flex: 1; |
| 231 | - padding: 120rpx 0 0; | 231 | + padding: 140rpx 0 0; |
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | .card { | 234 | .card { |
| @@ -250,7 +250,7 @@ export default { | @@ -250,7 +250,7 @@ export default { | ||
| 250 | font-weight: 600; | 250 | font-weight: 600; |
| 251 | position: absolute; | 251 | position: absolute; |
| 252 | top: -32rpx; | 252 | top: -32rpx; |
| 253 | - right: -32rpx; | 253 | + right: -12rpx; |
| 254 | height: 48rpx; | 254 | height: 48rpx; |
| 255 | line-height: 48rpx; | 255 | line-height: 48rpx; |
| 256 | color: #fff; | 256 | color: #fff; |
| @@ -312,7 +312,8 @@ export default { | @@ -312,7 +312,8 @@ export default { | ||
| 312 | const v = Number(it && it.quantity) | 312 | const v = Number(it && it.quantity) |
| 313 | return acc + (isNaN(v) ? 0 : v) | 313 | return acc + (isNaN(v) ? 0 : v) |
| 314 | }, 0) | 314 | }, 0) |
| 315 | - this.form.afterTotalQuantity = sum | 315 | + const fixedSum = Number(sum.toFixed(2)); |
| 316 | + this.form.afterTotalQuantity = fixedSum; | ||
| 316 | }, | 317 | }, |
| 317 | } | 318 | } |
| 318 | } | 319 | } |
| @@ -541,7 +542,6 @@ export default { | @@ -541,7 +542,6 @@ export default { | ||
| 541 | color: rgba(0, 0, 0, 0.9); | 542 | color: rgba(0, 0, 0, 0.9); |
| 542 | padding-bottom: 16rpx; | 543 | padding-bottom: 16rpx; |
| 543 | margin-bottom: 24rpx; | 544 | margin-bottom: 24rpx; |
| 544 | - ; | ||
| 545 | border-bottom: 1px dashed #E7E7E7; | 545 | border-bottom: 1px dashed #E7E7E7; |
| 546 | } | 546 | } |
| 547 | 547 | ||
| @@ -554,15 +554,16 @@ export default { | @@ -554,15 +554,16 @@ export default { | ||
| 554 | width: 180rpx; | 554 | width: 180rpx; |
| 555 | margin-right: 14rpx; | 555 | margin-right: 14rpx; |
| 556 | color: rgba(0, 0, 0, 0.6); | 556 | color: rgba(0, 0, 0, 0.6); |
| 557 | - font-size: 28rpx; | 557 | + font-size: 32rpx; |
| 558 | } | 558 | } |
| 559 | 559 | ||
| 560 | .value { | 560 | .value { |
| 561 | flex: 1; | 561 | flex: 1; |
| 562 | color: rgba(0, 0, 0, 0.9); | 562 | color: rgba(0, 0, 0, 0.9); |
| 563 | - font-size: 28rpx; | 563 | + font-size: 32rpx; |
| 564 | white-space: pre-wrap; | 564 | white-space: pre-wrap; |
| 565 | word-break: break-all; | 565 | word-break: break-all; |
| 566 | + font-weight: 600; | ||
| 566 | } | 567 | } |
| 567 | } | 568 | } |
| 568 | } | 569 | } |
| @@ -44,7 +44,7 @@ | @@ -44,7 +44,7 @@ | ||
| 44 | </uni-list-item> | 44 | </uni-list-item> |
| 45 | <uni-list-item title="厚度公差上限(mm)"> | 45 | <uni-list-item title="厚度公差上限(mm)"> |
| 46 | <template v-slot:footer> | 46 | <template v-slot:footer> |
| 47 | - <uni-easyinput type="number" v-model="item.thicknessTolPos" placeholder="请输入厚度公差上限" | 47 | + <uni-easyinput type="digit" v-model="item.thicknessTolPos" placeholder="请输入厚度公差上限" |
| 48 | :inputBorder="false" | 48 | :inputBorder="false" |
| 49 | @input="onRealNumberInput($event, item, idx, 'thicknessTolPos')" | 49 | @input="onRealNumberInput($event, item, idx, 'thicknessTolPos')" |
| 50 | @blur="onRealNumberBlur(item, idx, 'thicknessTolPos')" /> | 50 | @blur="onRealNumberBlur(item, idx, 'thicknessTolPos')" /> |
| @@ -52,7 +52,7 @@ | @@ -52,7 +52,7 @@ | ||
| 52 | </uni-list-item> | 52 | </uni-list-item> |
| 53 | <uni-list-item title="厚度公差下限(mm)"> | 53 | <uni-list-item title="厚度公差下限(mm)"> |
| 54 | <template v-slot:footer> | 54 | <template v-slot:footer> |
| 55 | - <uni-easyinput type="number" v-model="item.thicknessTolNeg" placeholder="请输入厚度公差下限" | 55 | + <uni-easyinput type="digit" v-model="item.thicknessTolNeg" placeholder="请输入厚度公差下限" |
| 56 | :inputBorder="false" | 56 | :inputBorder="false" |
| 57 | @input="onRealNumberInput($event, item, idx, 'thicknessTolNeg')" | 57 | @input="onRealNumberInput($event, item, idx, 'thicknessTolNeg')" |
| 58 | @blur="onRealNumberBlur(item, idx, 'thicknessTolNeg')" /> | 58 | @blur="onRealNumberBlur(item, idx, 'thicknessTolNeg')" /> |
| @@ -67,7 +67,7 @@ | @@ -67,7 +67,7 @@ | ||
| 67 | </uni-list-item> | 67 | </uni-list-item> |
| 68 | <uni-list-item title="宽度公差上限(mm)"> | 68 | <uni-list-item title="宽度公差上限(mm)"> |
| 69 | <template v-slot:footer> | 69 | <template v-slot:footer> |
| 70 | - <uni-easyinput type="number" v-model="item.widthTolPos" placeholder="请输入宽度公差上限" | 70 | + <uni-easyinput type="digit" v-model="item.widthTolPos" placeholder="请输入宽度公差上限" |
| 71 | :inputBorder="false" | 71 | :inputBorder="false" |
| 72 | @input="onRealNumberInput($event, item, idx, 'widthTolPos')" | 72 | @input="onRealNumberInput($event, item, idx, 'widthTolPos')" |
| 73 | @blur="onRealNumberBlur(item, idx, 'widthTolPos')" /> | 73 | @blur="onRealNumberBlur(item, idx, 'widthTolPos')" /> |
| @@ -75,7 +75,7 @@ | @@ -75,7 +75,7 @@ | ||
| 75 | </uni-list-item> | 75 | </uni-list-item> |
| 76 | <uni-list-item title="宽度公差下限(mm)"> | 76 | <uni-list-item title="宽度公差下限(mm)"> |
| 77 | <template v-slot:footer> | 77 | <template v-slot:footer> |
| 78 | - <uni-easyinput type="number" v-model="item.widthTolNeg" placeholder="请输入宽度公差下限" | 78 | + <uni-easyinput type="digit" v-model="item.widthTolNeg" placeholder="请输入宽度公差下限" |
| 79 | :inputBorder="false" | 79 | :inputBorder="false" |
| 80 | @input="onRealNumberInput($event, item, idx, 'widthTolNeg')" | 80 | @input="onRealNumberInput($event, item, idx, 'widthTolNeg')" |
| 81 | @blur="onRealNumberBlur(item, idx, 'widthTolNeg')" /> | 81 | @blur="onRealNumberBlur(item, idx, 'widthTolNeg')" /> |
| @@ -90,7 +90,7 @@ | @@ -90,7 +90,7 @@ | ||
| 90 | </uni-list-item> | 90 | </uni-list-item> |
| 91 | <uni-list-item title="长度公差上限(mm)"> | 91 | <uni-list-item title="长度公差上限(mm)"> |
| 92 | <template v-slot:footer> | 92 | <template v-slot:footer> |
| 93 | - <uni-easyinput type="number" v-model="item.lengthTolPos" placeholder="请输入长度公差上限" | 93 | + <uni-easyinput type="digit" v-model="item.lengthTolPos" placeholder="请输入长度公差上限" |
| 94 | :inputBorder="false" | 94 | :inputBorder="false" |
| 95 | @input="onRealNumberInput($event, item, idx, 'lengthTolPos')" | 95 | @input="onRealNumberInput($event, item, idx, 'lengthTolPos')" |
| 96 | @blur="onRealNumberBlur(item, idx, 'lengthTolPos')" /> | 96 | @blur="onRealNumberBlur(item, idx, 'lengthTolPos')" /> |
| @@ -98,7 +98,7 @@ | @@ -98,7 +98,7 @@ | ||
| 98 | </uni-list-item> | 98 | </uni-list-item> |
| 99 | <uni-list-item title="长度公差下限(mm)"> | 99 | <uni-list-item title="长度公差下限(mm)"> |
| 100 | <template v-slot:footer> | 100 | <template v-slot:footer> |
| 101 | - <uni-easyinput type="number" v-model="item.lengthTolNeg" placeholder="请输入长度公差下限" | 101 | + <uni-easyinput type="digit" v-model="item.lengthTolNeg" placeholder="请输入长度公差下限" |
| 102 | :inputBorder="false" | 102 | :inputBorder="false" |
| 103 | @input="onRealNumberInput($event, item, idx, 'lengthTolNeg')" | 103 | @input="onRealNumberInput($event, item, idx, 'lengthTolNeg')" |
| 104 | @blur="onRealNumberBlur(item, idx, 'lengthTolNeg')" /> | 104 | @blur="onRealNumberBlur(item, idx, 'lengthTolNeg')" /> |
| @@ -113,8 +113,9 @@ | @@ -113,8 +113,9 @@ | ||
| 113 | <template v-slot:footer> | 113 | <template v-slot:footer> |
| 114 | <uni-easyinput type="digit" v-model="item.quantity" placeholder="请输入数量kg" | 114 | <uni-easyinput type="digit" v-model="item.quantity" placeholder="请输入数量kg" |
| 115 | :inputBorder="false" | 115 | :inputBorder="false" |
| 116 | - @input="onNonNegativeNumberInput($event, item, idx, 'quantity')" | ||
| 117 | - @blur="onNonNegativeNumberBlur(item, idx, 'quantity')" /> | 116 | + @input="onTwoDecimalInput($event, item, idx, 'quantity')" |
| 117 | + @blur="onTwoDecimalBlur(item, idx, 'quantity')" | ||
| 118 | + /> | ||
| 118 | </template> | 119 | </template> |
| 119 | </uni-list-item> | 120 | </uni-list-item> |
| 120 | <uni-list-item v-if="item.showSalesPrice" title="销售价格"> | 121 | <uni-list-item v-if="item.showSalesPrice" title="销售价格"> |
| @@ -380,6 +381,49 @@ export default { | @@ -380,6 +381,49 @@ export default { | ||
| 380 | if (isNaN(n)) item[field] = '' | 381 | if (isNaN(n)) item[field] = '' |
| 381 | if (typeof idx === 'number') this.$set(this.items, idx, { ...item }) | 382 | if (typeof idx === 'number') this.$set(this.items, idx, { ...item }) |
| 382 | }, | 383 | }, |
| 384 | + // 限制输入为2位小数 | ||
| 385 | + onTwoDecimalInput(val, item, idx, field) { | ||
| 386 | + let v = String(val != null ? val : (item && item[field]) || '') | ||
| 387 | + v = v.replace(/[^0-9.]/g, '') | ||
| 388 | + v = v.replace(/(\..*)\./g, '$1') | ||
| 389 | + | ||
| 390 | + // Restrict to 2 decimal places | ||
| 391 | + const decimalIndex = v.indexOf('.') | ||
| 392 | + if (decimalIndex !== -1 && v.length > decimalIndex + 3) { | ||
| 393 | + v = v.substring(0, decimalIndex + 3) | ||
| 394 | + } | ||
| 395 | + | ||
| 396 | + if (v.startsWith('.')) v = '0' + v | ||
| 397 | + | ||
| 398 | + // If the value was modified (truncated or cleaned) | ||
| 399 | + if (String(val) !== v) { | ||
| 400 | + // Hack: Temporarily set the dirty value to trigger Vue update mechanism | ||
| 401 | + // This ensures that when we set the clean value back, Vue detects a change | ||
| 402 | + item[field] = val | ||
| 403 | + if (typeof idx === 'number') this.$set(this.items, idx, { ...item }) | ||
| 404 | + | ||
| 405 | + // Then revert to the clean value asynchronously | ||
| 406 | + setTimeout(() => { | ||
| 407 | + item[field] = v | ||
| 408 | + if (typeof idx === 'number') this.$set(this.items, idx, { ...item }) | ||
| 409 | + }, 0) | ||
| 410 | + } else { | ||
| 411 | + item[field] = v | ||
| 412 | + if (typeof idx === 'number') this.$set(this.items, idx, { ...item }) | ||
| 413 | + } | ||
| 414 | + }, | ||
| 415 | + onTwoDecimalBlur(item, idx, field) { | ||
| 416 | + let v = String((item && item[field]) || '') | ||
| 417 | + const num = Number(v) | ||
| 418 | + if (isNaN(num) || num < 0) { | ||
| 419 | + item[field] = '0' | ||
| 420 | + } else { | ||
| 421 | + if (v.endsWith('.')) { | ||
| 422 | + item[field] = v.slice(0, -1) | ||
| 423 | + } | ||
| 424 | + } | ||
| 425 | + if (typeof idx === 'number') this.$set(this.items, idx, { ...item }) | ||
| 426 | + }, | ||
| 383 | toggleViewCollapse() { | 427 | toggleViewCollapse() { |
| 384 | this.collapsedView = !this.collapsedView | 428 | this.collapsedView = !this.collapsedView |
| 385 | }, | 429 | }, |
| @@ -729,7 +773,6 @@ export default { | @@ -729,7 +773,6 @@ export default { | ||
| 729 | color: rgba(0, 0, 0, 0.9); | 773 | color: rgba(0, 0, 0, 0.9); |
| 730 | padding-bottom: 16rpx; | 774 | padding-bottom: 16rpx; |
| 731 | margin-bottom: 24rpx; | 775 | margin-bottom: 24rpx; |
| 732 | - ; | ||
| 733 | border-bottom: 1px dashed #E7E7E7; | 776 | border-bottom: 1px dashed #E7E7E7; |
| 734 | } | 777 | } |
| 735 | 778 | ||
| @@ -846,7 +889,6 @@ export default { | @@ -846,7 +889,6 @@ export default { | ||
| 846 | color: rgba(0, 0, 0, 0.9); | 889 | color: rgba(0, 0, 0, 0.9); |
| 847 | padding-bottom: 16rpx; | 890 | padding-bottom: 16rpx; |
| 848 | margin-bottom: 24rpx; | 891 | margin-bottom: 24rpx; |
| 849 | - ; | ||
| 850 | border-bottom: 1px dashed #E7E7E7; | 892 | border-bottom: 1px dashed #E7E7E7; |
| 851 | } | 893 | } |
| 852 | 894 |
| @@ -162,6 +162,7 @@ export default { | @@ -162,6 +162,7 @@ export default { | ||
| 162 | 162 | ||
| 163 | .label { | 163 | .label { |
| 164 | max-width: 420rpx; | 164 | max-width: 420rpx; |
| 165 | + margin-right: 20rpx; | ||
| 165 | line-height: 32rpx; | 166 | line-height: 32rpx; |
| 166 | font-size: 28rpx; | 167 | font-size: 28rpx; |
| 167 | color: rgba(0, 0, 0, 0.6); | 168 | color: rgba(0, 0, 0, 0.6); |
| @@ -63,7 +63,7 @@ | @@ -63,7 +63,7 @@ | ||
| 63 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" @change="onProductsChange" :options="productList" /> | 63 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" @change="onProductsChange" :options="productList" /> |
| 64 | <uni-list-item title="合计人民币金额(大写)"> | 64 | <uni-list-item title="合计人民币金额(大写)"> |
| 65 | <template v-slot:footer> | 65 | <template v-slot:footer> |
| 66 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" disabled /> | 66 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" disabled /> |
| 67 | </template> | 67 | </template> |
| 68 | </uni-list-item> | 68 | </uni-list-item> |
| 69 | <uni-list-item title="交付定金、数额、时间"> | 69 | <uni-list-item title="交付定金、数额、时间"> |
| @@ -555,7 +555,7 @@ export default { | @@ -555,7 +555,7 @@ export default { | ||
| 555 | async onSubmit() { | 555 | async onSubmit() { |
| 556 | if (!this.validateRequired()) return | 556 | if (!this.validateRequired()) return |
| 557 | const confirmRes = await new Promise(resolve => { | 557 | const confirmRes = await new Promise(resolve => { |
| 558 | - uni.showModal({ title: '提示', content: '确定新增经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 558 | + uni.showModal({ title: '提示', content: '确定新增外贸标准合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 559 | }) | 559 | }) |
| 560 | if (!(confirmRes && confirmRes.confirm)) return | 560 | if (!(confirmRes && confirmRes.confirm)) return |
| 561 | const clean = (obj) => { | 561 | const clean = (obj) => { |
| @@ -59,8 +59,10 @@ | @@ -59,8 +59,10 @@ | ||
| 59 | <view class="row"><text class="label">备注</text><text class="value">{{ detail.remarks || '-' | 59 | <view class="row"><text class="label">备注</text><text class="value">{{ detail.remarks || '-' |
| 60 | }}</text></view> | 60 | }}</text></view> |
| 61 | </view> | 61 | </view> |
| 62 | - <view class="section" v-if="status === 'STANDARD'"> | ||
| 63 | - <view class="row"><text class="label">规范性合同</text><text class="value" style="color: #3D48A3;">{{ | 62 | + <view class="section" v-if="detail.status === 'STANDARD'"> |
| 63 | + <view class="row"><text class="label">双方盖章合同</text><text class="value act" @click="downloadFile(detail.signedContractFileId, detail.signedContractFileName)">{{ | ||
| 64 | + detail.signedContractFileName || '-' }}</text></view> | ||
| 65 | + <view class="row"><text class="label">规范性合同</text><text class="value act" @click="downloadFile(detail.standardFileId, detail.standardFileName)">{{ | ||
| 64 | detail.standardFileName || '-' }}</text></view> | 66 | detail.standardFileName || '-' }}</text></view> |
| 65 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ | 67 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ |
| 66 | detail.standardStandardized ? '是' : '否' }}</text></view> | 68 | detail.standardStandardized ? '是' : '否' }}</text></view> |
| @@ -119,6 +121,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | @@ -119,6 +121,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | ||
| 119 | import FileUpload from '@/components/file-upload/index.vue' | 121 | import FileUpload from '@/components/file-upload/index.vue' |
| 120 | import SingleSelectSheet from '@/components/single-select/index.vue' | 122 | import SingleSelectSheet from '@/components/single-select/index.vue' |
| 121 | import { fillStandardApprovedName } from '@/utils/dic.js' | 123 | import { fillStandardApprovedName } from '@/utils/dic.js' |
| 124 | +import { downloadFile } from '@/utils/downloadFile.js' | ||
| 122 | 125 | ||
| 123 | export default { | 126 | export default { |
| 124 | name: 'ContractForeignStdDetail', | 127 | name: 'ContractForeignStdDetail', |
| @@ -229,8 +232,8 @@ export default { | @@ -229,8 +232,8 @@ export default { | ||
| 229 | { ...this.buttons[1], visible: (s === 'DRAFT' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:delete')) }, | 232 | { ...this.buttons[1], visible: (s === 'DRAFT' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:delete')) }, |
| 230 | { ...this.buttons[2], visible: (s !== 'DELETED' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:upload')) }, | 233 | { ...this.buttons[2], visible: (s !== 'DELETED' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:upload')) }, |
| 231 | { ...this.buttons[3], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:upload-seal')) }, | 234 | { ...this.buttons[3], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:upload-seal')) }, |
| 235 | + { ...this.buttons[5], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:review')) }, | ||
| 232 | { ...this.buttons[4], visible: (s === 'STANDARD' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:approve')) }, | 236 | { ...this.buttons[4], visible: (s === 'STANDARD' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:approve')) }, |
| 233 | - { ...this.buttons[5], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-standard-contract:review')) } | ||
| 234 | ] | 237 | ] |
| 235 | } | 238 | } |
| 236 | }, | 239 | }, |
| @@ -296,7 +299,7 @@ export default { | @@ -296,7 +299,7 @@ export default { | ||
| 296 | }) | 299 | }) |
| 297 | return | 300 | return |
| 298 | } | 301 | } |
| 299 | - if (!this.standardStandardized && this.uploadType === 'standard') { | 302 | + if (!this.standardStandardized && this.standardStandardized !== false && this.uploadType === 'standard') { |
| 300 | uni.showToast({ | 303 | uni.showToast({ |
| 301 | title: '请选择合同是否规范', | 304 | title: '请选择合同是否规范', |
| 302 | icon: 'error' | 305 | icon: 'error' |
| @@ -374,6 +377,7 @@ export default { | @@ -374,6 +377,7 @@ export default { | ||
| 374 | uni.setStorageSync(CACHE_KEY, this.getBusinessId()) | 377 | uni.setStorageSync(CACHE_KEY, this.getBusinessId()) |
| 375 | uni.navigateTo({ url: '/pages/flow/audit_detail' }) | 378 | uni.navigateTo({ url: '/pages/flow/audit_detail' }) |
| 376 | }, | 379 | }, |
| 380 | + downloadFile, | ||
| 377 | async loadDetail() { | 381 | async loadDetail() { |
| 378 | if (!this.id) return | 382 | if (!this.id) return |
| 379 | try { | 383 | try { |
| @@ -454,6 +458,10 @@ export default { | @@ -454,6 +458,10 @@ export default { | ||
| 454 | &_已签收 { | 458 | &_已签收 { |
| 455 | background-image: url('~@/static/images/contract/status_4.png'); | 459 | background-image: url('~@/static/images/contract/status_4.png'); |
| 456 | } | 460 | } |
| 461 | + | ||
| 462 | + &_已取消 { | ||
| 463 | + background-image: url('~@/static/images/contract/status_5.png'); | ||
| 464 | + } | ||
| 457 | } | 465 | } |
| 458 | } | 466 | } |
| 459 | 467 | ||
| @@ -473,7 +481,8 @@ export default { | @@ -473,7 +481,8 @@ export default { | ||
| 473 | } | 481 | } |
| 474 | 482 | ||
| 475 | .label { | 483 | .label { |
| 476 | - width: 310rpx; | 484 | + max-width: 310rpx; |
| 485 | + margin-right: 20rpx; | ||
| 477 | color: rgba(0, 0, 0, 0.6); | 486 | color: rgba(0, 0, 0, 0.6); |
| 478 | font-size: 28rpx; | 487 | font-size: 28rpx; |
| 479 | } | 488 | } |
| @@ -483,8 +492,16 @@ export default { | @@ -483,8 +492,16 @@ export default { | ||
| 483 | text-align: right; | 492 | text-align: right; |
| 484 | color: rgba(0, 0, 0, 0.9); | 493 | color: rgba(0, 0, 0, 0.9); |
| 485 | font-size: 28rpx; | 494 | font-size: 28rpx; |
| 495 | + white-space: pre-wrap; | ||
| 496 | + word-break: break-all; | ||
| 497 | + | ||
| 486 | } | 498 | } |
| 487 | 499 | ||
| 500 | +.act { | ||
| 501 | + color: $theme-primary; | ||
| 502 | + } | ||
| 503 | + | ||
| 504 | + | ||
| 488 | .customer { | 505 | .customer { |
| 489 | font-weight: 600; | 506 | font-weight: 600; |
| 490 | font-size: 36rpx; | 507 | font-size: 36rpx; |
| @@ -546,4 +563,7 @@ export default { | @@ -546,4 +563,7 @@ export default { | ||
| 546 | color: rgba(0, 0, 0, 0.6); | 563 | color: rgba(0, 0, 0, 0.6); |
| 547 | font-size: 32rpx; | 564 | font-size: 32rpx; |
| 548 | } | 565 | } |
| 566 | +.upload-row { | ||
| 567 | + margin-top: 20rpx; | ||
| 568 | +} | ||
| 549 | </style> | 569 | </style> |
| @@ -49,7 +49,7 @@ | @@ -49,7 +49,7 @@ | ||
| 49 | <view class="card" @click="goDetail(item)"> | 49 | <view class="card" @click="goDetail(item)"> |
| 50 | <view class="card-header"> | 50 | <view class="card-header"> |
| 51 | <text class="title omit2">{{ item.buyerName }}</text> | 51 | <text class="title omit2">{{ item.buyerName }}</text> |
| 52 | - <text v-if="item.status === 'STANDARD'" :class="['status']" :style="{ background: statusMap[item.shippingStatusName] }">{{ item.shippingStatusName }}</text> | 52 | + <text v-if="item.status === 'STANDARD'" :class="['status', 'status_' + item.shippingStatusName]">{{ item.shippingStatusName }}</text> |
| 53 | </view> | 53 | </view> |
| 54 | <view class="info-row"> | 54 | <view class="info-row"> |
| 55 | <text>编号</text><text>{{ item.code }}</text> | 55 | <text>编号</text><text>{{ item.code }}</text> |
| @@ -94,8 +94,7 @@ | @@ -94,8 +94,7 @@ | ||
| 94 | <script> | 94 | <script> |
| 95 | import CardList from '@/components/card/index.vue' | 95 | import CardList from '@/components/card/index.vue' |
| 96 | import FilterModal from '@/components/filter/index.vue' | 96 | import FilterModal from '@/components/filter/index.vue' |
| 97 | -import { queryContractApi, statusStyle,statusMap } from '@/api/contract.js' | ||
| 98 | -import { officeQueryApi } from '@/api/devManage.js' | 97 | +import { queryContractApi, statusStyle } from '@/api/contract.js' |
| 99 | 98 | ||
| 100 | export default { | 99 | export default { |
| 101 | components: { CardList, FilterModal }, | 100 | components: { CardList, FilterModal }, |
| @@ -118,7 +117,6 @@ export default { | @@ -118,7 +117,6 @@ export default { | ||
| 118 | filterForm: { deptId: '', deptName: '', dateRange: [] }, | 117 | filterForm: { deptId: '', deptName: '', dateRange: [] }, |
| 119 | deptSelectVisible: false, | 118 | deptSelectVisible: false, |
| 120 | statusStyle, | 119 | statusStyle, |
| 121 | - statusMap, | ||
| 122 | } | 120 | } |
| 123 | }, | 121 | }, |
| 124 | computed: { | 122 | computed: { |
| @@ -329,14 +327,31 @@ export default { | @@ -329,14 +327,31 @@ export default { | ||
| 329 | font-size: 30rpx; | 327 | font-size: 30rpx; |
| 330 | font-weight: 600; | 328 | font-weight: 600; |
| 331 | position: absolute; | 329 | position: absolute; |
| 332 | - top: -36rpx; | ||
| 333 | - right: -32rpx; | 330 | + top: -32rpx; |
| 331 | + right: -12rpx; | ||
| 334 | height: 48rpx; | 332 | height: 48rpx; |
| 335 | - line-height: 48rpx; | 333 | + line-height: 50rpx; |
| 336 | color: #fff; | 334 | color: #fff; |
| 337 | font-size: 24rpx; | 335 | font-size: 24rpx; |
| 338 | padding: 0 14rpx; | 336 | padding: 0 14rpx; |
| 339 | border-radius: 6rpx; | 337 | border-radius: 6rpx; |
| 338 | + &_审批中 { | ||
| 339 | + background: $theme-primary; | ||
| 340 | + } | ||
| 341 | + &_生产中 { | ||
| 342 | + background: #2BA471; | ||
| 343 | + } | ||
| 344 | + &_已发货 { | ||
| 345 | + background: #E37318; | ||
| 346 | + } | ||
| 347 | + &_已签收 { | ||
| 348 | + background: #858A99; | ||
| 349 | + color: #ffffff; | ||
| 350 | + } | ||
| 351 | + &_已取消 { | ||
| 352 | + background: #9E9E9E; | ||
| 353 | + color: #ffffff; | ||
| 354 | + } | ||
| 340 | } | 355 | } |
| 341 | } | 356 | } |
| 342 | .info-row { | 357 | .info-row { |
| @@ -366,19 +381,19 @@ export default { | @@ -366,19 +381,19 @@ export default { | ||
| 366 | } | 381 | } |
| 367 | } | 382 | } |
| 368 | 383 | ||
| 369 | -.filter-form { | 384 | +.filter-form { |
| 370 | .form-item { margin-bottom: 24rpx; } | 385 | .form-item { margin-bottom: 24rpx; } |
| 371 | - .label { | ||
| 372 | - margin-bottom: 20rpx; | 386 | + .label { |
| 387 | + margin-bottom: 20rpx; | ||
| 373 | color: rgba(0,0,0,0.9); | 388 | color: rgba(0,0,0,0.9); |
| 374 | height: 44rpx; | 389 | height: 44rpx; |
| 375 | line-height: 44rpx; | 390 | line-height: 44rpx; |
| 376 | font-size: 30rpx; | 391 | font-size: 30rpx; |
| 377 | } | 392 | } |
| 378 | - .fake-select { | ||
| 379 | - height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | 393 | + .fake-select { |
| 394 | + height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | ||
| 380 | .placeholder { color: #999; } | 395 | .placeholder { color: #999; } |
| 381 | .value { color: #333; } | 396 | .value { color: #333; } |
| 382 | } | 397 | } |
| 383 | } | 398 | } |
| 384 | -</style> | ||
| 399 | +</style> |
| @@ -65,7 +65,7 @@ | @@ -65,7 +65,7 @@ | ||
| 65 | <ProductRel ref="productRel" mode="add" :deliveryDateBase="form.deliveryDate" :deliveryDate="form.orderDate" :list="productLineList" @change="onProductsChange" :options="productList" /> | 65 | <ProductRel ref="productRel" mode="add" :deliveryDateBase="form.deliveryDate" :deliveryDate="form.orderDate" :list="productLineList" @change="onProductsChange" :options="productList" /> |
| 66 | <uni-list-item title="合计人民币金额(大写)"> | 66 | <uni-list-item title="合计人民币金额(大写)"> |
| 67 | <template v-slot:footer> | 67 | <template v-slot:footer> |
| 68 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" | 68 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" |
| 69 | disabled /> | 69 | disabled /> |
| 70 | </template> | 70 | </template> |
| 71 | </uni-list-item> | 71 | </uni-list-item> |
| @@ -531,7 +531,7 @@ export default { | @@ -531,7 +531,7 @@ export default { | ||
| 531 | console.log('onSubmit__payload', payload) | 531 | console.log('onSubmit__payload', payload) |
| 532 | if (!this.validateRequired()) return | 532 | if (!this.validateRequired()) return |
| 533 | const confirmRes = await new Promise(resolve => { | 533 | const confirmRes = await new Promise(resolve => { |
| 534 | - uni.showModal({ title: '提示', content: '确定保存当前经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 534 | + uni.showModal({ title: '提示', content: '确定保存当前外贸标准合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 535 | }) | 535 | }) |
| 536 | if (!(confirmRes && confirmRes.confirm)) return | 536 | if (!(confirmRes && confirmRes.confirm)) return |
| 537 | const clean = (obj) => { | 537 | const clean = (obj) => { |
| @@ -60,13 +60,13 @@ | @@ -60,13 +60,13 @@ | ||
| 60 | </uni-list-item> | 60 | </uni-list-item> |
| 61 | <uni-list-item title="厚度公差上限(mm)"> | 61 | <uni-list-item title="厚度公差上限(mm)"> |
| 62 | <template v-slot:footer> | 62 | <template v-slot:footer> |
| 63 | - <uni-easyinput type="text" v-model="item.thicknessTolPos" :inputBorder="false" | 63 | + <uni-easyinput type="digit" v-model="item.thicknessTolPos" :inputBorder="false" |
| 64 | placeholder="请输入厚度公差上限" @input="onNumberInput(idx, 'thicknessTolPos')" @blur="onNumberBlur(idx, 'thicknessTolPos', 9)" /> | 64 | placeholder="请输入厚度公差上限" @input="onNumberInput(idx, 'thicknessTolPos')" @blur="onNumberBlur(idx, 'thicknessTolPos', 9)" /> |
| 65 | </template> | 65 | </template> |
| 66 | </uni-list-item> | 66 | </uni-list-item> |
| 67 | <uni-list-item title="厚度公差下限(mm)"> | 67 | <uni-list-item title="厚度公差下限(mm)"> |
| 68 | <template v-slot:footer> | 68 | <template v-slot:footer> |
| 69 | - <uni-easyinput type="text" v-model="item.thicknessTolNeg" :inputBorder="false" | 69 | + <uni-easyinput type="digit" v-model="item.thicknessTolNeg" :inputBorder="false" |
| 70 | placeholder="请输入厚度公差下限" @input="onNumberInput(idx, 'thicknessTolNeg')" @blur="onNumberBlur(idx, 'thicknessTolNeg', 9)" /> | 70 | placeholder="请输入厚度公差下限" @input="onNumberInput(idx, 'thicknessTolNeg')" @blur="onNumberBlur(idx, 'thicknessTolNeg', 9)" /> |
| 71 | </template> | 71 | </template> |
| 72 | </uni-list-item> | 72 | </uni-list-item> |
| @@ -77,12 +77,12 @@ | @@ -77,12 +77,12 @@ | ||
| 77 | </uni-list-item> | 77 | </uni-list-item> |
| 78 | <uni-list-item title="宽度公差上限(mm)"> | 78 | <uni-list-item title="宽度公差上限(mm)"> |
| 79 | <template v-slot:footer> | 79 | <template v-slot:footer> |
| 80 | - <uni-easyinput type="text" v-model="item.widthTolPos" :inputBorder="false" placeholder="请输入宽度公差上限" @input="onNumberInput(idx, 'widthTolPos')" @blur="onNumberBlur(idx, 'widthTolPos', 9)" /> | 80 | + <uni-easyinput type="digit" v-model="item.widthTolPos" :inputBorder="false" placeholder="请输入宽度公差上限" @input="onNumberInput(idx, 'widthTolPos')" @blur="onNumberBlur(idx, 'widthTolPos', 9)" /> |
| 81 | </template> | 81 | </template> |
| 82 | </uni-list-item> | 82 | </uni-list-item> |
| 83 | <uni-list-item title="宽度公差下限(mm)"> | 83 | <uni-list-item title="宽度公差下限(mm)"> |
| 84 | <template v-slot:footer> | 84 | <template v-slot:footer> |
| 85 | - <uni-easyinput type="text" v-model="item.widthTolNeg" :inputBorder="false" placeholder="请输入宽度公差下限" @input="onNumberInput(idx, 'widthTolNeg')" @blur="onNumberBlur(idx, 'widthTolNeg', 9)" /> | 85 | + <uni-easyinput type="digit" v-model="item.widthTolNeg" :inputBorder="false" placeholder="请输入宽度公差下限" @input="onNumberInput(idx, 'widthTolNeg')" @blur="onNumberBlur(idx, 'widthTolNeg', 9)" /> |
| 86 | </template> | 86 | </template> |
| 87 | </uni-list-item> | 87 | </uni-list-item> |
| 88 | <uni-list-item title="长度(mm)"> | 88 | <uni-list-item title="长度(mm)"> |
| @@ -92,13 +92,13 @@ | @@ -92,13 +92,13 @@ | ||
| 92 | </uni-list-item> | 92 | </uni-list-item> |
| 93 | <uni-list-item title="长度公差上限(mm)"> | 93 | <uni-list-item title="长度公差上限(mm)"> |
| 94 | <template v-slot:footer> | 94 | <template v-slot:footer> |
| 95 | - <uni-easyinput type="text" v-model="item.lengthTolPos" :inputBorder="false" | 95 | + <uni-easyinput type="digit" v-model="item.lengthTolPos" :inputBorder="false" |
| 96 | placeholder="请输入长度公差上限" @input="onNumberInput(idx, 'lengthTolPos')" @blur="onNumberBlur(idx, 'lengthTolPos', 9)" /> | 96 | placeholder="请输入长度公差上限" @input="onNumberInput(idx, 'lengthTolPos')" @blur="onNumberBlur(idx, 'lengthTolPos', 9)" /> |
| 97 | </template> | 97 | </template> |
| 98 | </uni-list-item> | 98 | </uni-list-item> |
| 99 | <uni-list-item title="长度公差下限(mm)"> | 99 | <uni-list-item title="长度公差下限(mm)"> |
| 100 | <template v-slot:footer> | 100 | <template v-slot:footer> |
| 101 | - <uni-easyinput type="text" v-model="item.lengthTolNeg" :inputBorder="false" | 101 | + <uni-easyinput type="digit" v-model="item.lengthTolNeg" :inputBorder="false" |
| 102 | placeholder="请输入长度公差下限" @input="onNumberInput(idx, 'lengthTolNeg')" @blur="onNumberBlur(idx, 'lengthTolNeg', 9)" /> | 102 | placeholder="请输入长度公差下限" @input="onNumberInput(idx, 'lengthTolNeg')" @blur="onNumberBlur(idx, 'lengthTolNeg', 9)" /> |
| 103 | </template> | 103 | </template> |
| 104 | </uni-list-item> | 104 | </uni-list-item> |
| @@ -109,7 +109,7 @@ | @@ -109,7 +109,7 @@ | ||
| 109 | </uni-list-item> | 109 | </uni-list-item> |
| 110 | <uni-list-item title="数量"> | 110 | <uni-list-item title="数量"> |
| 111 | <template v-slot:footer> | 111 | <template v-slot:footer> |
| 112 | - <uni-easyinput v-model="item.quantity" type="digit" :inputBorder="false" placeholder="请输入数量kg" @input="onNonNegativeInput(idx, 'quantity')" @blur="onNonNegativeBlur(idx, 'quantity', 9)" /> | 112 | + <uni-easyinput v-model="item.quantity" type="digit" :inputBorder="false" placeholder="请输入数量kg" @input="onNonNegativeInput(idx, 'quantity')" @blur="onNonNegativeBlur(idx, 'quantity', 2)" /> |
| 113 | </template> | 113 | </template> |
| 114 | </uni-list-item> | 114 | </uni-list-item> |
| 115 | <uni-list-item title="单价"> | 115 | <uni-list-item title="单价"> |
| @@ -119,17 +119,17 @@ | @@ -119,17 +119,17 @@ | ||
| 119 | </uni-list-item> | 119 | </uni-list-item> |
| 120 | <uni-list-item title="外贸加工费"> | 120 | <uni-list-item title="外贸加工费"> |
| 121 | <template v-slot:footer> | 121 | <template v-slot:footer> |
| 122 | - <uni-easyinput v-model="item.processingFee" type="number" :inputBorder="false" placeholder="请输入外贸加工费" /> | 122 | + <uni-easyinput v-model="item.processingFee" type="digit" :inputBorder="false" placeholder="请输入外贸加工费" /> |
| 123 | </template> | 123 | </template> |
| 124 | </uni-list-item> | 124 | </uni-list-item> |
| 125 | <!-- <uni-list-item title="不含税金额"> | 125 | <!-- <uni-list-item title="不含税金额"> |
| 126 | <template v-slot:footer> | 126 | <template v-slot:footer> |
| 127 | - <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 127 | + <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="" /> |
| 128 | </template> | 128 | </template> |
| 129 | </uni-list-item> --> | 129 | </uni-list-item> --> |
| 130 | <uni-list-item title="总金额"> | 130 | <uni-list-item title="总金额"> |
| 131 | <template v-slot:footer> | 131 | <template v-slot:footer> |
| 132 | - <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 132 | + <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="" /> |
| 133 | </template> | 133 | </template> |
| 134 | </uni-list-item> | 134 | </uni-list-item> |
| 135 | <uni-list-item title="发货日期"> | 135 | <uni-list-item title="发货日期"> |
| @@ -157,29 +157,33 @@ | @@ -157,29 +157,33 @@ | ||
| 157 | <view class="row"><text class="label">牌号</text><text class="value">{{ item.brand }}</text></view> | 157 | <view class="row"><text class="label">牌号</text><text class="value">{{ item.brand }}</text></view> |
| 158 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> | 158 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> |
| 159 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> | 159 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> |
| 160 | - <view class="row row-spec"><text class="label">规格(mm)</text> | ||
| 161 | - <view class="value value-spec"> | ||
| 162 | - <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 163 | - <view v-if="item.thickness" class="value-spec_box"> | ||
| 164 | - <view v-if="item.thicknessTolPos" class="value-spec_box_1">+{{ item.thicknessTolPos }} | ||
| 165 | - </view> | ||
| 166 | - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg }} | ||
| 167 | - </view> | 160 | + <view class="row row-spec"><text class="label">规格(mm)</text> |
| 161 | + <view class="value value-spec"> | ||
| 162 | + <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 163 | + <view v-if="item.thickness" class="value-spec_box"> | ||
| 164 | + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos }} | ||
| 168 | </view> | 165 | </view> |
| 169 | - <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 170 | - <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 171 | - <view v-if="item.width" class="value-spec_box"> | ||
| 172 | - <view v-if="item.widthTolPos" class="value-spec_box_1">+{{ item.widthTolPos }}</view> | ||
| 173 | - <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg }}</view> | 166 | + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }} |
| 174 | </view> | 167 | </view> |
| 175 | - <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 176 | - <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 177 | - <view v-if="item.length" class="value-spec_box"> | ||
| 178 | - <view v-if="item.lengthTolPos" class="value-spec_box_1">+{{ item.lengthTolPos }}</view> | ||
| 179 | - <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg }}</view> | 168 | + </view> |
| 169 | + <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 170 | + <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 171 | + <view v-if="item.width" class="value-spec_box"> | ||
| 172 | + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' + item.widthTolPos : item.widthTolPos }} | ||
| 173 | + </view> | ||
| 174 | + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' + item.widthTolNeg : item.widthTolNeg }} | ||
| 175 | + </view> | ||
| 176 | + </view> | ||
| 177 | + <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 178 | + <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 179 | + <view v-if="item.length" class="value-spec_box"> | ||
| 180 | + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' + item.lengthTolPos : item.lengthTolPos }} | ||
| 181 | + </view> | ||
| 182 | + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' + item.lengthTolNeg : item.lengthTolNeg }} | ||
| 180 | </view> | 183 | </view> |
| 181 | </view> | 184 | </view> |
| 182 | </view> | 185 | </view> |
| 186 | + </view> | ||
| 183 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> | 187 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> |
| 184 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> | 188 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> |
| 185 | <view class="row"><text class="label">单价</text><text class="value">{{ formatCurrency(item.unitPrice) | 189 | <view class="row"><text class="label">单价</text><text class="value">{{ formatCurrency(item.unitPrice) |
| @@ -232,12 +236,10 @@ export default { | @@ -232,12 +236,10 @@ export default { | ||
| 232 | const m = Number(parts[1]) | 236 | const m = Number(parts[1]) |
| 233 | const d = Number(parts[2]) | 237 | const d = Number(parts[2]) |
| 234 | if (!y || !m || !d) return '' | 238 | if (!y || !m || !d) return '' |
| 235 | - const dt = new Date(y, m - 1, d) | ||
| 236 | - dt.setDate(dt.getDate() + 1) | ||
| 237 | - const yy = dt.getFullYear() | ||
| 238 | - const mm = String(dt.getMonth() + 1).padStart(2, '0') | ||
| 239 | - const dd = String(dt.getDate() - 1).padStart(2, '0') | ||
| 240 | - return `${yy}/${mm}/${dd}` | 239 | + const yy = y |
| 240 | + const mm = String(m).padStart(2, '0') | ||
| 241 | + const dd = String(d).padStart(2, '0') | ||
| 242 | + return `${yy}-${mm}-${dd}` | ||
| 241 | } | 243 | } |
| 242 | }, | 244 | }, |
| 243 | watch: { | 245 | watch: { |
| @@ -64,9 +64,9 @@ | @@ -64,9 +64,9 @@ | ||
| 64 | </uni-list-item> | 64 | </uni-list-item> |
| 65 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" | 65 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" |
| 66 | @change="onProductsChange" :options="productList" /> | 66 | @change="onProductsChange" :options="productList" /> |
| 67 | - <uni-list-item title="合计人民币金额(大写)"> | 67 | + <uni-list-item title="合计金额(大写)"> |
| 68 | <template v-slot:footer> | 68 | <template v-slot:footer> |
| 69 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" disabled /> | 69 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" disabled /> |
| 70 | </template> | 70 | </template> |
| 71 | </uni-list-item> | 71 | </uni-list-item> |
| 72 | <uni-list-item title="交付定金、数额、时间"> | 72 | <uni-list-item title="交付定金、数额、时间"> |
| @@ -189,7 +189,7 @@ | @@ -189,7 +189,7 @@ | ||
| 189 | <div class="total-text"> | 189 | <div class="total-text"> |
| 190 | 合计 | 190 | 合计 |
| 191 | </div> | 191 | </div> |
| 192 | - <div class="total-item"> | 192 | + <div class="total-item" style="padding: 20rpx 0;"> |
| 193 | <div class="total-item-text"> | 193 | <div class="total-item-text"> |
| 194 | 数量 | 194 | 数量 |
| 195 | </div> | 195 | </div> |
| @@ -205,14 +205,14 @@ | @@ -205,14 +205,14 @@ | ||
| 205 | ¥{{ (totalAmountExcludingTax || 0).toFixed(2) }} | 205 | ¥{{ (totalAmountExcludingTax || 0).toFixed(2) }} |
| 206 | </div> | 206 | </div> |
| 207 | </div> --> | 207 | </div> --> |
| 208 | - <div class="total-item"> | 208 | + <!-- <div class="total-item"> |
| 209 | <div class="total-item-text"> | 209 | <div class="total-item-text"> |
| 210 | 总金额 | 210 | 总金额 |
| 211 | </div> | 211 | </div> |
| 212 | <div class="total-item-price text-red"> | 212 | <div class="total-item-price text-red"> |
| 213 | - ¥{{ (totalAmountIncludingTax || 0).toFixed(2) }} | 213 | + - |
| 214 | </div> | 214 | </div> |
| 215 | - </div> | 215 | + </div> --> |
| 216 | </div> | 216 | </div> |
| 217 | <button class="btn submit" type="primary" @click="onSubmit">提交</button> | 217 | <button class="btn submit" type="primary" @click="onSubmit">提交</button> |
| 218 | </view> | 218 | </view> |
| @@ -559,7 +559,7 @@ export default { | @@ -559,7 +559,7 @@ export default { | ||
| 559 | async onSubmit() { | 559 | async onSubmit() { |
| 560 | if (!this.validateRequired()) return | 560 | if (!this.validateRequired()) return |
| 561 | const confirmRes = await new Promise(resolve => { | 561 | const confirmRes = await new Promise(resolve => { |
| 562 | - uni.showModal({ title: '提示', content: '确定新增经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 562 | + uni.showModal({ title: '提示', content: '确定新增外贸库存合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 563 | }) | 563 | }) |
| 564 | if (!(confirmRes && confirmRes.confirm)) return | 564 | if (!(confirmRes && confirmRes.confirm)) return |
| 565 | const clean = (obj) => { | 565 | const clean = (obj) => { |
| @@ -40,7 +40,7 @@ | @@ -40,7 +40,7 @@ | ||
| 40 | </view> | 40 | </view> |
| 41 | 41 | ||
| 42 | <view class="section"> | 42 | <view class="section"> |
| 43 | - <view class="row"><text class="label">合计人民币金额(大写)</text><text class="value">{{ | 43 | + <view class="row"><text class="label">合计金额(大写)</text><text class="value">{{ |
| 44 | detail.totalAmountCapital || '-' }}</text></view> | 44 | detail.totalAmountCapital || '-' }}</text></view> |
| 45 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || | 45 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || |
| 46 | '-' }}</text></view> | 46 | '-' }}</text></view> |
| @@ -73,13 +73,15 @@ | @@ -73,13 +73,15 @@ | ||
| 73 | </view> | 73 | </view> |
| 74 | 74 | ||
| 75 | <view class="section" v-if="detail.status === 'STANDARD'"> | 75 | <view class="section" v-if="detail.status === 'STANDARD'"> |
| 76 | - <view class="row"><text class="label">规范性合同</text><text class="value" style="color: #3D48A3;">{{ | 76 | + <view class="row"><text class="label">双方盖章合同</text><text class="value act" @click="downloadFile(detail.signedContractFileId, detail.signedContractFileName)">{{ |
| 77 | + detail.signedContractFileName || '-' }}</text></view> | ||
| 78 | + <view class="row"><text class="label">规范性合同</text><text class="value act" @click="downloadFile(detail.standardFileId, detail.standardFileName)">{{ | ||
| 77 | detail.standardFileName || '-' }}</text></view> | 79 | detail.standardFileName || '-' }}</text></view> |
| 78 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ | 80 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ |
| 79 | detail.standardStandardized ? '是' : '否' }}</text></view> | 81 | detail.standardStandardized ? '是' : '否' }}</text></view> |
| 80 | </view> | 82 | </view> |
| 81 | <view class="section" v-if="detail.status === 'FORMAL'"> | 83 | <view class="section" v-if="detail.status === 'FORMAL'"> |
| 82 | - <view class="row"><text class="label">规范性合同</text><text class="value" style="color: #3D48A3;">{{ | 84 | + <view class="row"><text class="label">规范性合同</text><text class="value act" @click="downloadFile(detail.formalFileId, detail.formalFileName)">{{ |
| 83 | detail.formalFileName || '-' }}</text></view> | 85 | detail.formalFileName || '-' }}</text></view> |
| 84 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ detail.formalStandardized | 86 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ detail.formalStandardized |
| 85 | ? '是' : '否' }}</text></view> | 87 | ? '是' : '否' }}</text></view> |
| @@ -138,6 +140,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | @@ -138,6 +140,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | ||
| 138 | import FileUpload from '@/components/file-upload/index.vue' | 140 | import FileUpload from '@/components/file-upload/index.vue' |
| 139 | import SingleSelectSheet from '@/components/single-select/index.vue' | 141 | import SingleSelectSheet from '@/components/single-select/index.vue' |
| 140 | import { fillStandardApprovedName, fillFormalApprovedName } from '@/utils/dic.js' | 142 | import { fillStandardApprovedName, fillFormalApprovedName } from '@/utils/dic.js' |
| 143 | +import { downloadFile } from '@/utils/downloadFile.js' | ||
| 141 | 144 | ||
| 142 | export default { | 145 | export default { |
| 143 | name: 'ContractForeignStockDetail', | 146 | name: 'ContractForeignStockDetail', |
| @@ -294,13 +297,13 @@ export default { | @@ -294,13 +297,13 @@ export default { | ||
| 294 | { ...this.buttons[3], visible: ((s === 'DRAFT' || s === 'FORMAL') && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:upload')) }, | 297 | { ...this.buttons[3], visible: ((s === 'DRAFT' || s === 'FORMAL') && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:upload')) }, |
| 295 | { ...this.buttons[4], visible: (s === 'STANDARD' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:upload')) }, | 298 | { ...this.buttons[4], visible: (s === 'STANDARD' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:upload')) }, |
| 296 | { ...this.buttons[5], visible: (s === 'STANDARD' && a !== 'AUDIT' && a !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:standard-upload')) }, | 299 | { ...this.buttons[5], visible: (s === 'STANDARD' && a !== 'AUDIT' && a !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:standard-upload')) }, |
| 297 | - { ...this.buttons[6], visible: (s === 'FORMAL' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:approve')) }, | ||
| 298 | - { ...this.buttons[7], visible: (s === 'STANDARD' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:approve')) }, | ||
| 299 | - { ...this.buttons[8], visible: (s === 'STANDARD' && f && a === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:standard-approve')) }, | ||
| 300 | { ...this.buttons[9], visible: (s === 'FORMAL' && t && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:review')) }, | 300 | { ...this.buttons[9], visible: (s === 'FORMAL' && t && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:review')) }, |
| 301 | { ...this.buttons[10], visible: (s === 'STANDARD' && t && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:review')) }, | 301 | { ...this.buttons[10], visible: (s === 'STANDARD' && t && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:review')) }, |
| 302 | { ...this.buttons[11], visible: (s === 'STANDARD' && a && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:standard-review')) }, | 302 | { ...this.buttons[11], visible: (s === 'STANDARD' && a && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:standard-review')) }, |
| 303 | { ...this.buttons[12], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:upload-seal')) }, | 303 | { ...this.buttons[12], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:upload-seal')) }, |
| 304 | + { ...this.buttons[6], visible: (s === 'FORMAL' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:approve')) }, | ||
| 305 | + { ...this.buttons[7], visible: (s === 'STANDARD' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:approve')) }, | ||
| 306 | + { ...this.buttons[8], visible: (s === 'STANDARD' && f && a === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-inventory-contract:standard-approve')) }, | ||
| 304 | ] | 307 | ] |
| 305 | } | 308 | } |
| 306 | }, | 309 | }, |
| @@ -366,7 +369,7 @@ export default { | @@ -366,7 +369,7 @@ export default { | ||
| 366 | }) | 369 | }) |
| 367 | return | 370 | return |
| 368 | } | 371 | } |
| 369 | - if (!this.standardStandardized && this.uploadType !== 'seal') { | 372 | + if (!this.standardStandardized && this.standardStandardized !== false && this.uploadType !== 'seal') { |
| 370 | uni.showToast({ | 373 | uni.showToast({ |
| 371 | title: '请选择合同是否规范', | 374 | title: '请选择合同是否规范', |
| 372 | icon: 'error' | 375 | icon: 'error' |
| @@ -465,6 +468,7 @@ export default { | @@ -465,6 +468,7 @@ export default { | ||
| 465 | uni.setStorageSync(CACHE_KEY, id) | 468 | uni.setStorageSync(CACHE_KEY, id) |
| 466 | uni.navigateTo({ url: '/pages/flow/audit_detail' }) | 469 | uni.navigateTo({ url: '/pages/flow/audit_detail' }) |
| 467 | }, | 470 | }, |
| 471 | + downloadFile, | ||
| 468 | async loadDetail() { | 472 | async loadDetail() { |
| 469 | if (!this.id) return | 473 | if (!this.id) return |
| 470 | try { | 474 | try { |
| @@ -546,6 +550,10 @@ export default { | @@ -546,6 +550,10 @@ export default { | ||
| 546 | &_已签收 { | 550 | &_已签收 { |
| 547 | background-image: url('~@/static/images/contract/status_4.png'); | 551 | background-image: url('~@/static/images/contract/status_4.png'); |
| 548 | } | 552 | } |
| 553 | + | ||
| 554 | + &_已取消 { | ||
| 555 | + background-image: url('~@/static/images/contract/status_5.png'); | ||
| 556 | + } | ||
| 549 | } | 557 | } |
| 550 | } | 558 | } |
| 551 | 559 | ||
| @@ -565,7 +573,8 @@ export default { | @@ -565,7 +573,8 @@ export default { | ||
| 565 | } | 573 | } |
| 566 | 574 | ||
| 567 | .label { | 575 | .label { |
| 568 | - width: 310rpx; | 576 | + max-width: 310rpx; |
| 577 | + margin-right: 20rpx; | ||
| 569 | color: rgba(0, 0, 0, 0.6); | 578 | color: rgba(0, 0, 0, 0.6); |
| 570 | font-size: 28rpx; | 579 | font-size: 28rpx; |
| 571 | } | 580 | } |
| @@ -575,6 +584,11 @@ export default { | @@ -575,6 +584,11 @@ export default { | ||
| 575 | text-align: right; | 584 | text-align: right; |
| 576 | color: rgba(0, 0, 0, 0.9); | 585 | color: rgba(0, 0, 0, 0.9); |
| 577 | font-size: 28rpx; | 586 | font-size: 28rpx; |
| 587 | + white-space: pre-wrap; | ||
| 588 | + word-break: break-all; | ||
| 589 | + &.act { | ||
| 590 | + color: $theme-primary; | ||
| 591 | + } | ||
| 578 | } | 592 | } |
| 579 | 593 | ||
| 580 | .customer { | 594 | .customer { |
| @@ -638,4 +652,7 @@ export default { | @@ -638,4 +652,7 @@ export default { | ||
| 638 | color: rgba(0, 0, 0, 0.6); | 652 | color: rgba(0, 0, 0, 0.6); |
| 639 | font-size: 32rpx; | 653 | font-size: 32rpx; |
| 640 | } | 654 | } |
| 655 | +.upload-row { | ||
| 656 | + margin-top: 20rpx; | ||
| 657 | +} | ||
| 641 | </style> | 658 | </style> |
| @@ -49,7 +49,7 @@ | @@ -49,7 +49,7 @@ | ||
| 49 | <view class="card" @click="goDetail(item)"> | 49 | <view class="card" @click="goDetail(item)"> |
| 50 | <view class="card-header"> | 50 | <view class="card-header"> |
| 51 | <text class="title omit2">{{ item.buyerName }}</text> | 51 | <text class="title omit2">{{ item.buyerName }}</text> |
| 52 | - <text v-if="item.status === 'STANDARD'" :class="['status']" :style="{ background: statusMap[item.shippingStatusName] }">{{ item.shippingStatusName }}</text> | 52 | + <text v-if="item.status === 'STANDARD'" :class="['status', 'status_' + item.shippingStatusName]">{{ item.shippingStatusName }}</text> |
| 53 | </view> | 53 | </view> |
| 54 | <view class="info-row"> | 54 | <view class="info-row"> |
| 55 | <text>编号</text><text>{{ item.code }}</text> | 55 | <text>编号</text><text>{{ item.code }}</text> |
| @@ -96,8 +96,7 @@ | @@ -96,8 +96,7 @@ | ||
| 96 | <script> | 96 | <script> |
| 97 | import CardList from '@/components/card/index.vue' | 97 | import CardList from '@/components/card/index.vue' |
| 98 | import FilterModal from '@/components/filter/index.vue' | 98 | import FilterModal from '@/components/filter/index.vue' |
| 99 | -import { queryContractApi, statusStyle,statusMap } from '@/api/contract.js' | ||
| 100 | -import { officeQueryApi } from '@/api/devManage.js' | 99 | +import { queryContractApi, statusStyle } from '@/api/contract.js' |
| 101 | 100 | ||
| 102 | export default { | 101 | export default { |
| 103 | components: { CardList, FilterModal }, | 102 | components: { CardList, FilterModal }, |
| @@ -118,7 +117,6 @@ export default { | @@ -118,7 +117,6 @@ export default { | ||
| 118 | filterForm: { deptId: '', deptName: '', dateRange: [] }, | 117 | filterForm: { deptId: '', deptName: '', dateRange: [] }, |
| 119 | deptSelectVisible: false, | 118 | deptSelectVisible: false, |
| 120 | statusStyle, | 119 | statusStyle, |
| 121 | - statusMap, | ||
| 122 | } | 120 | } |
| 123 | }, | 121 | }, |
| 124 | computed: { | 122 | computed: { |
| @@ -330,26 +328,30 @@ export default { | @@ -330,26 +328,30 @@ export default { | ||
| 330 | font-size: 30rpx; | 328 | font-size: 30rpx; |
| 331 | font-weight: 600; | 329 | font-weight: 600; |
| 332 | position: absolute; | 330 | position: absolute; |
| 333 | - top: -36rpx; | ||
| 334 | - right: -32rpx; | 331 | + top: -32rpx; |
| 332 | + right: -12rpx; | ||
| 335 | height: 48rpx; | 333 | height: 48rpx; |
| 336 | - line-height: 48rpx; | 334 | + line-height: 50rpx; |
| 337 | color: #fff; | 335 | color: #fff; |
| 338 | font-size: 24rpx; | 336 | font-size: 24rpx; |
| 339 | padding: 0 14rpx; | 337 | padding: 0 14rpx; |
| 340 | border-radius: 6rpx; | 338 | border-radius: 6rpx; |
| 341 | - &.status_1 { | 339 | + &_审批中 { |
| 342 | background: $theme-primary; | 340 | background: $theme-primary; |
| 343 | } | 341 | } |
| 344 | - &.status_2 { | 342 | + &_生产中 { |
| 345 | background: #2BA471; | 343 | background: #2BA471; |
| 346 | } | 344 | } |
| 347 | - &.status_3 { | ||
| 348 | - background: #D54941; | 345 | + &_已发货 { |
| 346 | + background: #E37318; | ||
| 349 | } | 347 | } |
| 350 | - &.status_4 { | ||
| 351 | - background: #E7E7E7; | ||
| 352 | - color: rgba(0,0,0,0.9); | 348 | + &_已签收 { |
| 349 | + background: #858A99; | ||
| 350 | + color: #ffffff; | ||
| 351 | + } | ||
| 352 | + &_已取消 { | ||
| 353 | + background: #9E9E9E; | ||
| 354 | + color: #ffffff; | ||
| 353 | } | 355 | } |
| 354 | } | 356 | } |
| 355 | } | 357 | } |
| @@ -380,19 +382,19 @@ export default { | @@ -380,19 +382,19 @@ export default { | ||
| 380 | } | 382 | } |
| 381 | } | 383 | } |
| 382 | 384 | ||
| 383 | -.filter-form { | 385 | +.filter-form { |
| 384 | .form-item { margin-bottom: 24rpx; } | 386 | .form-item { margin-bottom: 24rpx; } |
| 385 | - .label { | ||
| 386 | - margin-bottom: 20rpx; | 387 | + .label { |
| 388 | + margin-bottom: 20rpx; | ||
| 387 | color: rgba(0,0,0,0.9); | 389 | color: rgba(0,0,0,0.9); |
| 388 | height: 44rpx; | 390 | height: 44rpx; |
| 389 | line-height: 44rpx; | 391 | line-height: 44rpx; |
| 390 | font-size: 30rpx; | 392 | font-size: 30rpx; |
| 391 | } | 393 | } |
| 392 | - .fake-select { | ||
| 393 | - height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | 394 | + .fake-select { |
| 395 | + height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | ||
| 394 | .placeholder { color: #999; } | 396 | .placeholder { color: #999; } |
| 395 | .value { color: #333; } | 397 | .value { color: #333; } |
| 396 | } | 398 | } |
| 397 | } | 399 | } |
| 398 | -</style> | ||
| 400 | +</style> |
| @@ -4,14 +4,9 @@ | @@ -4,14 +4,9 @@ | ||
| 4 | <view class="lock-page"> | 4 | <view class="lock-page"> |
| 5 | <view class="block" v-for="(item, idx) in items" :key="idx"> | 5 | <view class="block" v-for="(item, idx) in items" :key="idx"> |
| 6 | <view class="block-header"> | 6 | <view class="block-header"> |
| 7 | - <uni-data-checkbox | ||
| 8 | - multiple | ||
| 9 | - mode="default" | ||
| 10 | - :localdata="[{ text: '锁价', value: 'LOCKED' }]" | ||
| 11 | - :modelValue="item.locked ? ['LOCKED'] : []" | ||
| 12 | - :disabled="true" | ||
| 13 | - @change="onLockChange(idx, $event)" | ||
| 14 | - /> | 7 | + <uni-data-checkbox multiple mode="default" :localdata="[{ text: '锁价', value: 'LOCKED' }]" |
| 8 | + :modelValue="item.locked ? ['LOCKED'] : []" :disabled="true" | ||
| 9 | + @change="onLockChange(idx, $event)" /> | ||
| 15 | <view class="ops" @click="toggleItem(idx)"> | 10 | <view class="ops" @click="toggleItem(idx)"> |
| 16 | <image class="opIcon" | 11 | <image class="opIcon" |
| 17 | :src="item.collapsed ? '/static/images/up.png' : '/static/images/down.png'" /> | 12 | :src="item.collapsed ? '/static/images/up.png' : '/static/images/down.png'" /> |
| @@ -22,12 +17,14 @@ | @@ -22,12 +17,14 @@ | ||
| 22 | <uni-list v-show="item.collapsed"> | 17 | <uni-list v-show="item.collapsed"> |
| 23 | <uni-list-item title="产品名称"> | 18 | <uni-list-item title="产品名称"> |
| 24 | <template v-slot:footer> | 19 | <template v-slot:footer> |
| 25 | - <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" disabled /> | 20 | + <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" |
| 21 | + disabled /> | ||
| 26 | </template> | 22 | </template> |
| 27 | </uni-list-item> | 23 | </uni-list-item> |
| 28 | <uni-list-item title="行业"> | 24 | <uni-list-item title="行业"> |
| 29 | <template v-slot:footer> | 25 | <template v-slot:footer> |
| 30 | - <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" disabled /> | 26 | + <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" |
| 27 | + disabled /> | ||
| 31 | </template> | 28 | </template> |
| 32 | </uni-list-item> | 29 | </uni-list-item> |
| 33 | <uni-list-item title="牌号"> | 30 | <uni-list-item title="牌号"> |
| @@ -42,28 +39,39 @@ | @@ -42,28 +39,39 @@ | ||
| 42 | </uni-list-item> | 39 | </uni-list-item> |
| 43 | <uni-list-item title="规格(mm)"> | 40 | <uni-list-item title="规格(mm)"> |
| 44 | <template v-slot:footer> | 41 | <template v-slot:footer> |
| 45 | - <!-- <uni-easyinput v-model="item.specDisplay" placeholder="自动拼接规格" :clearable="false" disabled /> --> | ||
| 46 | - <view class="value value-spec"> | ||
| 47 | - <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 48 | - <view v-if="item.thickness" class="value-spec_box"> | ||
| 49 | - <view v-if="item.thicknessTolPos" class="value-spec_box_1">+{{ item.thicknessTolPos }} | 42 | + <view class="value value-spec"> |
| 43 | + <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 44 | + <view v-if="item.thickness" class="value-spec_box"> | ||
| 45 | + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ | ||
| 46 | + item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos | ||
| 47 | + }} | ||
| 48 | + </view> | ||
| 49 | + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ | ||
| 50 | + item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg | ||
| 51 | + }} | ||
| 52 | + </view> | ||
| 53 | + </view> | ||
| 54 | + <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 55 | + <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 56 | + <view v-if="item.width" class="value-spec_box"> | ||
| 57 | + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? | ||
| 58 | + '+' + item.widthTolPos : item.widthTolPos }} | ||
| 59 | + </view> | ||
| 60 | + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? | ||
| 61 | + '+' + item.widthTolNeg : item.widthTolNeg }} | ||
| 62 | + </view> | ||
| 63 | + </view> | ||
| 64 | + <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 65 | + <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 66 | + <view v-if="item.length" class="value-spec_box"> | ||
| 67 | + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 | ||
| 68 | + ? '+' + item.lengthTolPos : item.lengthTolPos }} | ||
| 69 | + </view> | ||
| 70 | + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 | ||
| 71 | + ? '+' + item.lengthTolNeg : item.lengthTolNeg }} | ||
| 72 | + </view> | ||
| 73 | + </view> | ||
| 50 | </view> | 74 | </view> |
| 51 | - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">-{{ item.thicknessTolNeg }} | ||
| 52 | - </view> | ||
| 53 | - </view> | ||
| 54 | - <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 55 | - <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 56 | - <view v-if="item.width" class="value-spec_box"> | ||
| 57 | - <view v-if="item.widthTolPos" class="value-spec_box_1">+{{ item.widthTolPos }}</view> | ||
| 58 | - <view v-if="item.widthTolNeg" class="value-spec_box_2">-{{ item.widthTolNeg }}</view> | ||
| 59 | - </view> | ||
| 60 | - <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 61 | - <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 62 | - <view v-if="item.length" class="value-spec_box"> | ||
| 63 | - <view v-if="item.lengthTolPos" class="value-spec_box_1">+{{ item.lengthTolPos }}</view> | ||
| 64 | - <view v-if="item.lengthTolNeg" class="value-spec_box_2">-{{ item.lengthTolNeg }}</view> | ||
| 65 | - </view> | ||
| 66 | - </view> | ||
| 67 | </template> | 75 | </template> |
| 68 | </uni-list-item> | 76 | </uni-list-item> |
| 69 | <uni-list-item title="状态"> | 77 | <uni-list-item title="状态"> |
| @@ -73,27 +81,32 @@ | @@ -73,27 +81,32 @@ | ||
| 73 | </uni-list-item> | 81 | </uni-list-item> |
| 74 | <uni-list-item title="数量"> | 82 | <uni-list-item title="数量"> |
| 75 | <template v-slot:footer> | 83 | <template v-slot:footer> |
| 76 | - <uni-easyinput v-model="item.quantity" type="number" :inputBorder="false" disabled placeholder="不可编辑" /> | 84 | + <uni-easyinput v-model="item.quantity" type="number" :inputBorder="false" disabled |
| 85 | + placeholder="不可编辑" /> | ||
| 77 | </template> | 86 | </template> |
| 78 | </uni-list-item> | 87 | </uni-list-item> |
| 79 | <uni-list-item title="单价"> | 88 | <uni-list-item title="单价"> |
| 80 | <template v-slot:footer> | 89 | <template v-slot:footer> |
| 81 | - <uni-easyinput v-model="item.unitPrice" type="number" :inputBorder="false" placeholder="请输入单价" @input="onImmediateChange(idx)" @blur="onNumberBlur(idx, 'unitPrice', 0)" /> | 90 | + <uni-easyinput v-model="item.unitPrice" type="digit" :inputBorder="false" |
| 91 | + placeholder="请输入单价" @input="onImmediateChange(idx)" | ||
| 92 | + @blur="onNumberBlur(idx, 'unitPrice', 0)" /> | ||
| 82 | </template> | 93 | </template> |
| 83 | </uni-list-item> | 94 | </uni-list-item> |
| 84 | - <uni-list-item title="不含税金额"> | 95 | + <!-- <uni-list-item title="不含税金额"> |
| 85 | <template v-slot:footer> | 96 | <template v-slot:footer> |
| 86 | - <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 97 | + <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" |
| 98 | + disabled placeholder="" /> | ||
| 87 | </template> | 99 | </template> |
| 88 | - </uni-list-item> | 100 | + </uni-list-item> --> |
| 89 | <uni-list-item title="总金额"> | 101 | <uni-list-item title="总金额"> |
| 90 | <template v-slot:footer> | 102 | <template v-slot:footer> |
| 91 | - <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 103 | + <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled |
| 104 | + placeholder="" /> | ||
| 92 | </template> | 105 | </template> |
| 93 | </uni-list-item> | 106 | </uni-list-item> |
| 94 | <uni-list-item title="发货日期"> | 107 | <uni-list-item title="发货日期"> |
| 95 | <template v-slot:footer> | 108 | <template v-slot:footer> |
| 96 | - <uni-easyinput v-model="item.deliveryDate" :inputBorder="false" disabled /> | 109 | + <uni-easyinput v-model="item.deliveryDate" :inputBorder="false" disabled /> |
| 97 | </template> | 110 | </template> |
| 98 | </uni-list-item> | 111 | </uni-list-item> |
| 99 | </uni-list> | 112 | </uni-list> |
| @@ -101,12 +114,14 @@ | @@ -101,12 +114,14 @@ | ||
| 101 | <uni-list v-show="!item.collapsed"> | 114 | <uni-list v-show="!item.collapsed"> |
| 102 | <uni-list-item title="产品名称"> | 115 | <uni-list-item title="产品名称"> |
| 103 | <template v-slot:footer> | 116 | <template v-slot:footer> |
| 104 | - <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" disabled /> | 117 | + <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" |
| 118 | + disabled /> | ||
| 105 | </template> | 119 | </template> |
| 106 | </uni-list-item> | 120 | </uni-list-item> |
| 107 | <uni-list-item title="行业"> | 121 | <uni-list-item title="行业"> |
| 108 | <template v-slot:footer> | 122 | <template v-slot:footer> |
| 109 | - <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" disabled /> | 123 | + <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" |
| 124 | + disabled /> | ||
| 110 | </template> | 125 | </template> |
| 111 | </uni-list-item> | 126 | </uni-list-item> |
| 112 | <uni-list-item title="牌号"> | 127 | <uni-list-item title="牌号"> |
| @@ -114,44 +129,45 @@ | @@ -114,44 +129,45 @@ | ||
| 114 | <uni-easyinput v-model="item.brand" placeholder="请输入牌号" :clearable="false" disabled /> | 129 | <uni-easyinput v-model="item.brand" placeholder="请输入牌号" :clearable="false" disabled /> |
| 115 | </template> | 130 | </template> |
| 116 | </uni-list-item> | 131 | </uni-list-item> |
| 117 | - <view class="footer"> | ||
| 118 | - <div class="total"> | ||
| 119 | - <div class="total-text"> | ||
| 120 | - 合计 | ||
| 121 | - </div> | ||
| 122 | - <div class="total-item"> | ||
| 123 | - <div class="total-item-text"> | ||
| 124 | - 数量 | ||
| 125 | - </div> | ||
| 126 | - <div class="total-item-price"> | ||
| 127 | - {{ (totalQuantity || 0).toFixed(2) }}kg | ||
| 128 | - </div> | ||
| 129 | - </div> | ||
| 130 | - <!-- <div class="total-item"> | ||
| 131 | - <div class="total-item-text"> | ||
| 132 | - 不含税金额 | ||
| 133 | - </div> | ||
| 134 | - <div class="total-item-price text-red"> | ||
| 135 | - ¥{{ (totalAmountExcludingTax || 0).toFixed(2) }} | ||
| 136 | - </div> | ||
| 137 | - </div> --> | ||
| 138 | - <div class="total-item"> | ||
| 139 | - <div class="total-item-text"> | ||
| 140 | - 总金额 | ||
| 141 | - </div> | ||
| 142 | - <div class="total-item-price text-red"> | ||
| 143 | - ¥{{ (totalAmountIncludingTax || 0).toFixed(2) }} | ||
| 144 | - </div> | ||
| 145 | - </div> | ||
| 146 | - </div> | ||
| 147 | - <button class="btn submit" type="primary" @click="onSubmit">提交</button> | ||
| 148 | - </view> | 132 | + |
| 149 | </uni-list> | 133 | </uni-list> |
| 150 | </view> | 134 | </view> |
| 135 | + <view class="footer"> | ||
| 136 | + <div class="total"> | ||
| 137 | + <div class="total-text"> | ||
| 138 | + 合计 | ||
| 139 | + </div> | ||
| 140 | + <div class="total-item"> | ||
| 141 | + <div class="total-item-text"> | ||
| 142 | + 数量 | ||
| 143 | + </div> | ||
| 144 | + <div class="total-item-price"> | ||
| 145 | + {{ (totalQuantity || 0).toFixed(2) }}kg | ||
| 146 | + </div> | ||
| 147 | + </div> | ||
| 148 | + <!-- <div class="total-item"> | ||
| 149 | + <div class="total-item-text"> | ||
| 150 | + 不含税金额 | ||
| 151 | + </div> | ||
| 152 | + <div class="total-item-price text-red"> | ||
| 153 | + ¥{{ (totalAmountExcludingTax || 0).toFixed(2) }} | ||
| 154 | + </div> | ||
| 155 | + </div> --> | ||
| 156 | + <div class="total-item"> | ||
| 157 | + <div class="total-item-text"> | ||
| 158 | + 总金额 | ||
| 159 | + </div> | ||
| 160 | + <div class="total-item-price text-red"> | ||
| 161 | + ¥{{ (totalAmountIncludingTax || 0).toFixed(2) }} | ||
| 162 | + </div> | ||
| 163 | + </div> | ||
| 164 | + </div> | ||
| 165 | + <button class="btn submit" type="primary" @click="onSubmit">提交</button> | ||
| 166 | + </view> | ||
| 151 | </view> | 167 | </view> |
| 152 | </scroll-view> | 168 | </scroll-view> |
| 153 | 169 | ||
| 154 | - | 170 | + |
| 155 | </view> | 171 | </view> |
| 156 | </template> | 172 | </template> |
| 157 | 173 | ||
| @@ -168,7 +184,7 @@ export default { | @@ -168,7 +184,7 @@ export default { | ||
| 168 | planQty: 30, | 184 | planQty: 30, |
| 169 | } | 185 | } |
| 170 | }, | 186 | }, |
| 171 | - computed: { | 187 | + computed: { |
| 172 | totalQuantity() { | 188 | totalQuantity() { |
| 173 | const qty = this.items.filter(it => it.locked).reduce((p, c) => p + this.toNumber(c.quantity), 0) | 189 | const qty = this.items.filter(it => it.locked).reduce((p, c) => p + this.toNumber(c.quantity), 0) |
| 174 | return this.round(qty, 2) | 190 | return this.round(qty, 2) |
| @@ -337,7 +353,7 @@ export default { | @@ -337,7 +353,7 @@ export default { | ||
| 337 | } | 353 | } |
| 338 | const invalid = selected.find(r => { | 354 | const invalid = selected.find(r => { |
| 339 | const p = this.toNumber(r.unitPrice) | 355 | const p = this.toNumber(r.unitPrice) |
| 340 | - return !( p > 0) | 356 | + return !(p > 0) |
| 341 | }) | 357 | }) |
| 342 | if (invalid) { | 358 | if (invalid) { |
| 343 | uni.showToast({ title: '请填写单价', icon: 'none' }) | 359 | uni.showToast({ title: '请填写单价', icon: 'none' }) |
| @@ -350,7 +366,7 @@ export default { | @@ -350,7 +366,7 @@ export default { | ||
| 350 | // totalAmountExcludingTax: this.totalAmountExcludingTax, | 366 | // totalAmountExcludingTax: this.totalAmountExcludingTax, |
| 351 | totalAmountIncludingTax: this.totalAmountIncludingTax, | 367 | totalAmountIncludingTax: this.totalAmountIncludingTax, |
| 352 | totalQuantity: this.totalQuantity, | 368 | totalQuantity: this.totalQuantity, |
| 353 | - type:'INTL_INVENTORY_AGMT', | 369 | + type: 'INTL_INVENTORY_AGMT', |
| 354 | contractDistributorLineList: selected | 370 | contractDistributorLineList: selected |
| 355 | } | 371 | } |
| 356 | 372 | ||
| @@ -365,7 +381,7 @@ export default { | @@ -365,7 +381,7 @@ export default { | ||
| 365 | uni.navigateTo({ url: '/pages/contract_foreign_stock/index' }) | 381 | uni.navigateTo({ url: '/pages/contract_foreign_stock/index' }) |
| 366 | }, 500) | 382 | }, 500) |
| 367 | }).catch((err) => { | 383 | }).catch((err) => { |
| 368 | - uni.showToast({ title: err.msg ||'提交失败', icon: 'none' }) | 384 | + uni.showToast({ title: err.msg || '提交失败', icon: 'none' }) |
| 369 | }) | 385 | }) |
| 370 | } | 386 | } |
| 371 | } | 387 | } |
| @@ -424,6 +440,7 @@ export default { | @@ -424,6 +440,7 @@ export default { | ||
| 424 | width: 36rpx; | 440 | width: 36rpx; |
| 425 | height: 36rpx; | 441 | height: 36rpx; |
| 426 | } | 442 | } |
| 443 | + | ||
| 427 | .block-header ::v-deep .uni-data-checklist .checklist-text { | 444 | .block-header ::v-deep .uni-data-checklist .checklist-text { |
| 428 | font-size: 28rpx; | 445 | font-size: 28rpx; |
| 429 | margin-left: 12rpx; | 446 | margin-left: 12rpx; |
| @@ -556,6 +573,7 @@ export default { | @@ -556,6 +573,7 @@ export default { | ||
| 556 | ::v-deep .is-disabled { | 573 | ::v-deep .is-disabled { |
| 557 | background-color: transparent !important; | 574 | background-color: transparent !important; |
| 558 | } | 575 | } |
| 576 | + | ||
| 559 | // ::v-deep .uni-list-item__content-title { | 577 | // ::v-deep .uni-list-item__content-title { |
| 560 | // font-size: 28rpx; | 578 | // font-size: 28rpx; |
| 561 | // color: rgba(0, 0, 0, 0.9); | 579 | // color: rgba(0, 0, 0, 0.9); |
| @@ -721,42 +739,45 @@ export default { | @@ -721,42 +739,45 @@ export default { | ||
| 721 | background: $theme-primary; | 739 | background: $theme-primary; |
| 722 | color: #fff; | 740 | color: #fff; |
| 723 | } | 741 | } |
| 724 | - .value-spec { | 742 | + |
| 743 | +.value-spec { | ||
| 744 | + height: 48rpx; | ||
| 745 | + display: flex; | ||
| 746 | + align-items: center; | ||
| 747 | + color: #000000; | ||
| 748 | + | ||
| 749 | + // justify-content: end; | ||
| 750 | + &_box { | ||
| 751 | + position: relative; | ||
| 752 | + width: 60rpx; | ||
| 725 | height: 48rpx; | 753 | height: 48rpx; |
| 726 | - display: flex; | ||
| 727 | - align-items: center; | ||
| 728 | - color: #000000; | ||
| 729 | - // justify-content: end; | ||
| 730 | - &_box { | ||
| 731 | - position: relative; | ||
| 732 | - width: 60rpx; | ||
| 733 | - height: 48rpx; | ||
| 734 | - | ||
| 735 | - &_1 { | ||
| 736 | - font-size: 16rpx; | ||
| 737 | - position: absolute; | ||
| 738 | - top: -10rpx; | ||
| 739 | - left: 0; | ||
| 740 | - } | ||
| 741 | 754 | ||
| 742 | - &_2 { | ||
| 743 | - font-size: 16rpx; | ||
| 744 | - position: absolute; | ||
| 745 | - bottom: -10rpx; | ||
| 746 | - left: 0; | ||
| 747 | - } | 755 | + &_1 { |
| 756 | + font-size: 16rpx; | ||
| 757 | + position: absolute; | ||
| 758 | + top: -10rpx; | ||
| 759 | + left: 0; | ||
| 748 | } | 760 | } |
| 749 | 761 | ||
| 750 | - &_val { | ||
| 751 | - font-size: 28rpx; | ||
| 752 | - | ||
| 753 | - &.p12 { | ||
| 754 | - padding-right: 12rpx; | ||
| 755 | - } | 762 | + &_2 { |
| 763 | + font-size: 16rpx; | ||
| 764 | + position: absolute; | ||
| 765 | + bottom: -10rpx; | ||
| 766 | + left: 0; | ||
| 756 | } | 767 | } |
| 757 | } | 768 | } |
| 758 | - .row-spec { | ||
| 759 | - height: 60rpx; | ||
| 760 | - align-items: center; | 769 | + |
| 770 | + &_val { | ||
| 771 | + font-size: 28rpx; | ||
| 772 | + | ||
| 773 | + &.p12 { | ||
| 774 | + padding-right: 12rpx; | ||
| 761 | } | 775 | } |
| 776 | + } | ||
| 777 | +} | ||
| 778 | + | ||
| 779 | +.row-spec { | ||
| 780 | + height: 60rpx; | ||
| 781 | + align-items: center; | ||
| 782 | +} | ||
| 762 | </style> | 783 | </style> |
| @@ -67,9 +67,9 @@ | @@ -67,9 +67,9 @@ | ||
| 67 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" | 67 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" |
| 68 | :list="productLineList" @change="onProductsChange" :options="productList" /> | 68 | :list="productLineList" @change="onProductsChange" :options="productList" /> |
| 69 | 69 | ||
| 70 | - <uni-list-item title="合计人民币金额(大写)"> | 70 | + <uni-list-item title="合计金额(大写)"> |
| 71 | <template v-slot:footer> | 71 | <template v-slot:footer> |
| 72 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" | 72 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" |
| 73 | disabled /> | 73 | disabled /> |
| 74 | </template> | 74 | </template> |
| 75 | </uni-list-item> | 75 | </uni-list-item> |
| @@ -188,7 +188,7 @@ | @@ -188,7 +188,7 @@ | ||
| 188 | <view class="footer"> | 188 | <view class="footer"> |
| 189 | <div class="total"> | 189 | <div class="total"> |
| 190 | <div class="total-text">合计</div> | 190 | <div class="total-text">合计</div> |
| 191 | - <div class="total-item"> | 191 | + <div class="total-item" style="padding: 20rpx 0;"> |
| 192 | <div class="total-item-text">数量</div> | 192 | <div class="total-item-text">数量</div> |
| 193 | <div class="total-item-price">{{ (totalQuantity || 0).toFixed(2) }}kg</div> | 193 | <div class="total-item-price">{{ (totalQuantity || 0).toFixed(2) }}kg</div> |
| 194 | </div> | 194 | </div> |
| @@ -196,10 +196,10 @@ | @@ -196,10 +196,10 @@ | ||
| 196 | <div class="total-item-text">不含税金额</div> | 196 | <div class="total-item-text">不含税金额</div> |
| 197 | <div class="total-item-price text-red">¥{{ (totalAmountExcludingTax || 0).toFixed(2) }}</div> | 197 | <div class="total-item-price text-red">¥{{ (totalAmountExcludingTax || 0).toFixed(2) }}</div> |
| 198 | </div> --> | 198 | </div> --> |
| 199 | - <div class="total-item"> | 199 | + <!-- <div class="total-item"> |
| 200 | <div class="total-item-text">总金额</div> | 200 | <div class="total-item-text">总金额</div> |
| 201 | <div class="total-item-price text-red">¥{{ (totalAmountIncludingTax || 0).toFixed(2) }}</div> | 201 | <div class="total-item-price text-red">¥{{ (totalAmountIncludingTax || 0).toFixed(2) }}</div> |
| 202 | - </div> | 202 | + </div> --> |
| 203 | </div> | 203 | </div> |
| 204 | <button class="btn submit" type="primary" @click="onSubmit">保存</button> | 204 | <button class="btn submit" type="primary" @click="onSubmit">保存</button> |
| 205 | </view> | 205 | </view> |
| @@ -534,7 +534,7 @@ export default { | @@ -534,7 +534,7 @@ export default { | ||
| 534 | console.log('onSubmit__payload', payload) | 534 | console.log('onSubmit__payload', payload) |
| 535 | if (!this.validateRequired()) return | 535 | if (!this.validateRequired()) return |
| 536 | const confirmRes = await new Promise(resolve => { | 536 | const confirmRes = await new Promise(resolve => { |
| 537 | - uni.showModal({ title: '提示', content: '确定保存当前经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 537 | + uni.showModal({ title: '提示', content: '确定保存当前外贸库存合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 538 | }) | 538 | }) |
| 539 | if (!(confirmRes && confirmRes.confirm)) return | 539 | if (!(confirmRes && confirmRes.confirm)) return |
| 540 | const clean = (obj) => { | 540 | const clean = (obj) => { |
| @@ -60,13 +60,13 @@ | @@ -60,13 +60,13 @@ | ||
| 60 | </uni-list-item> | 60 | </uni-list-item> |
| 61 | <uni-list-item title="厚度公差上限(mm)"> | 61 | <uni-list-item title="厚度公差上限(mm)"> |
| 62 | <template v-slot:footer> | 62 | <template v-slot:footer> |
| 63 | - <uni-easyinput type="text" v-model="item.thicknessTolPos" :inputBorder="false" | 63 | + <uni-easyinput type="digit" v-model="item.thicknessTolPos" :inputBorder="false" |
| 64 | placeholder="请输入厚度公差上限" @input="onNumberInput(idx, 'thicknessTolPos')" @blur="onNumberBlur(idx, 'thicknessTolPos', 9)" /> | 64 | placeholder="请输入厚度公差上限" @input="onNumberInput(idx, 'thicknessTolPos')" @blur="onNumberBlur(idx, 'thicknessTolPos', 9)" /> |
| 65 | </template> | 65 | </template> |
| 66 | </uni-list-item> | 66 | </uni-list-item> |
| 67 | <uni-list-item title="厚度公差下限(mm)"> | 67 | <uni-list-item title="厚度公差下限(mm)"> |
| 68 | <template v-slot:footer> | 68 | <template v-slot:footer> |
| 69 | - <uni-easyinput type="text" v-model="item.thicknessTolNeg" :inputBorder="false" | 69 | + <uni-easyinput type="digit" v-model="item.thicknessTolNeg" :inputBorder="false" |
| 70 | placeholder="请输入厚度公差下限" @input="onNumberInput(idx, 'thicknessTolNeg')" @blur="onNumberBlur(idx, 'thicknessTolNeg', 9)" /> | 70 | placeholder="请输入厚度公差下限" @input="onNumberInput(idx, 'thicknessTolNeg')" @blur="onNumberBlur(idx, 'thicknessTolNeg', 9)" /> |
| 71 | </template> | 71 | </template> |
| 72 | </uni-list-item> | 72 | </uni-list-item> |
| @@ -77,13 +77,13 @@ | @@ -77,13 +77,13 @@ | ||
| 77 | </uni-list-item> | 77 | </uni-list-item> |
| 78 | <uni-list-item title="宽度公差上限(mm)"> | 78 | <uni-list-item title="宽度公差上限(mm)"> |
| 79 | <template v-slot:footer> | 79 | <template v-slot:footer> |
| 80 | - <uni-easyinput type="text" v-model="item.widthTolPos" :inputBorder="false" | 80 | + <uni-easyinput type="digit" v-model="item.widthTolPos" :inputBorder="false" |
| 81 | placeholder="请输入宽度公差上限" @input="onNumberInput(idx, 'widthTolPos')" @blur="onNumberBlur(idx, 'widthTolPos', 9)" /> | 81 | placeholder="请输入宽度公差上限" @input="onNumberInput(idx, 'widthTolPos')" @blur="onNumberBlur(idx, 'widthTolPos', 9)" /> |
| 82 | </template> | 82 | </template> |
| 83 | </uni-list-item> | 83 | </uni-list-item> |
| 84 | <uni-list-item title="宽度公差下限(mm)"> | 84 | <uni-list-item title="宽度公差下限(mm)"> |
| 85 | <template v-slot:footer> | 85 | <template v-slot:footer> |
| 86 | - <uni-easyinput type="text" v-model="item.widthTolNeg" :inputBorder="false" | 86 | + <uni-easyinput type="digit" v-model="item.widthTolNeg" :inputBorder="false" |
| 87 | placeholder="请输入宽度公差下限" @input="onNumberInput(idx, 'widthTolNeg')" @blur="onNumberBlur(idx, 'widthTolNeg', 9)" /> | 87 | placeholder="请输入宽度公差下限" @input="onNumberInput(idx, 'widthTolNeg')" @blur="onNumberBlur(idx, 'widthTolNeg', 9)" /> |
| 88 | </template> | 88 | </template> |
| 89 | </uni-list-item> | 89 | </uni-list-item> |
| @@ -94,13 +94,13 @@ | @@ -94,13 +94,13 @@ | ||
| 94 | </uni-list-item> | 94 | </uni-list-item> |
| 95 | <uni-list-item title="长度公差上限(mm)"> | 95 | <uni-list-item title="长度公差上限(mm)"> |
| 96 | <template v-slot:footer> | 96 | <template v-slot:footer> |
| 97 | - <uni-easyinput type="text" v-model="item.lengthTolPos" :inputBorder="false" | 97 | + <uni-easyinput type="digit" v-model="item.lengthTolPos" :inputBorder="false" |
| 98 | placeholder="请输入长度公差上限" @input="onNumberInput(idx, 'lengthTolPos')" @blur="onNumberBlur(idx, 'lengthTolPos', 9)" /> | 98 | placeholder="请输入长度公差上限" @input="onNumberInput(idx, 'lengthTolPos')" @blur="onNumberBlur(idx, 'lengthTolPos', 9)" /> |
| 99 | </template> | 99 | </template> |
| 100 | </uni-list-item> | 100 | </uni-list-item> |
| 101 | <uni-list-item title="长度公差下限(mm)"> | 101 | <uni-list-item title="长度公差下限(mm)"> |
| 102 | <template v-slot:footer> | 102 | <template v-slot:footer> |
| 103 | - <uni-easyinput type="text" v-model="item.lengthTolNeg" :inputBorder="false" | 103 | + <uni-easyinput type="digit" v-model="item.lengthTolNeg" :inputBorder="false" |
| 104 | placeholder="请输入长度公差下限" @input="onNumberInput(idx, 'lengthTolNeg')" @blur="onNumberBlur(idx, 'lengthTolNeg', 9)" /> | 104 | placeholder="请输入长度公差下限" @input="onNumberInput(idx, 'lengthTolNeg')" @blur="onNumberBlur(idx, 'lengthTolNeg', 9)" /> |
| 105 | </template> | 105 | </template> |
| 106 | </uni-list-item> | 106 | </uni-list-item> |
| @@ -111,27 +111,27 @@ | @@ -111,27 +111,27 @@ | ||
| 111 | </uni-list-item> | 111 | </uni-list-item> |
| 112 | <uni-list-item title="数量"> | 112 | <uni-list-item title="数量"> |
| 113 | <template v-slot:footer> | 113 | <template v-slot:footer> |
| 114 | - <uni-easyinput v-model="item.quantity" type="digit" :inputBorder="false" placeholder="请输入数量" @input="onNonNegativeInput(idx, 'quantity')" @blur="onNonNegativeBlur(idx, 'quantity', 9)" /> | 114 | + <uni-easyinput v-model="item.quantity" type="digit" :inputBorder="false" placeholder="请输入数量kg" @input="onNonNegativeInput(idx, 'quantity')" @blur="onNonNegativeBlur(idx, 'quantity', 2)" /> |
| 115 | </template> | 115 | </template> |
| 116 | </uni-list-item> | 116 | </uni-list-item> |
| 117 | <uni-list-item title="单价"> | 117 | <uni-list-item title="单价"> |
| 118 | <template v-slot:footer> | 118 | <template v-slot:footer> |
| 119 | - <uni-easyinput v-model="item.unitPrice" disabled type="number" :inputBorder="false" placeholder="请输入单价" @input="onImmediateChange(idx)" @blur="onNumberBlur(idx, 'unitPrice', 9)" /> | 119 | + <uni-easyinput placeholder="-" disabled type="number" :inputBorder="false" @input="onImmediateChange(idx)" @blur="onNumberBlur(idx, 'unitPrice', 9)" /> |
| 120 | </template> | 120 | </template> |
| 121 | </uni-list-item> | 121 | </uni-list-item> |
| 122 | <uni-list-item title="外贸加工费"> | 122 | <uni-list-item title="外贸加工费"> |
| 123 | <template v-slot:footer> | 123 | <template v-slot:footer> |
| 124 | - <uni-easyinput v-model="item.processingFee" type="number" :inputBorder="false" placeholder="请输入外贸加工费" /> | 124 | + <uni-easyinput v-model="item.processingFee" type="digit" :inputBorder="false" placeholder="请输入外贸加工费" /> |
| 125 | </template> | 125 | </template> |
| 126 | </uni-list-item> | 126 | </uni-list-item> |
| 127 | <!-- <uni-list-item title="不含税金额"> | 127 | <!-- <uni-list-item title="不含税金额"> |
| 128 | <template v-slot:footer> | 128 | <template v-slot:footer> |
| 129 | - <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 129 | + <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="" /> |
| 130 | </template> | 130 | </template> |
| 131 | </uni-list-item> --> | 131 | </uni-list-item> --> |
| 132 | <uni-list-item title="总金额"> | 132 | <uni-list-item title="总金额"> |
| 133 | <template v-slot:footer> | 133 | <template v-slot:footer> |
| 134 | - <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 134 | + <uni-easyinput :inputBorder="false" disabled placeholder="-" /> |
| 135 | </template> | 135 | </template> |
| 136 | </uni-list-item> | 136 | </uni-list-item> |
| 137 | <uni-list-item title="发货日期"> | 137 | <uni-list-item title="发货日期"> |
| @@ -159,29 +159,33 @@ | @@ -159,29 +159,33 @@ | ||
| 159 | <view class="row"><text class="label">牌号</text><text class="value">{{ item.brand }}</text></view> | 159 | <view class="row"><text class="label">牌号</text><text class="value">{{ item.brand }}</text></view> |
| 160 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> | 160 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> |
| 161 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> | 161 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> |
| 162 | - <view class="row row-spec"><text class="label">规格(mm)</text> | ||
| 163 | - <view class="value value-spec"> | ||
| 164 | - <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 165 | - <view v-if="item.thickness" class="value-spec_box"> | ||
| 166 | - <view v-if="item.thicknessTolPos" class="value-spec_box_1">+{{ item.thicknessTolPos }} | ||
| 167 | - </view> | ||
| 168 | - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg }} | ||
| 169 | - </view> | 162 | + <view class="row row-spec"><text class="label">规格(mm)</text> |
| 163 | + <view class="value value-spec"> | ||
| 164 | + <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 165 | + <view v-if="item.thickness" class="value-spec_box"> | ||
| 166 | + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos }} | ||
| 170 | </view> | 167 | </view> |
| 171 | - <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 172 | - <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 173 | - <view v-if="item.width" class="value-spec_box"> | ||
| 174 | - <view v-if="item.widthTolPos" class="value-spec_box_1">+{{ item.widthTolPos }}</view> | ||
| 175 | - <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg }}</view> | 168 | + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }} |
| 176 | </view> | 169 | </view> |
| 177 | - <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 178 | - <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 179 | - <view v-if="item.length" class="value-spec_box"> | ||
| 180 | - <view v-if="item.lengthTolPos" class="value-spec_box_1">+{{ item.lengthTolPos }}</view> | ||
| 181 | - <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg }}</view> | 170 | + </view> |
| 171 | + <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 172 | + <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 173 | + <view v-if="item.width" class="value-spec_box"> | ||
| 174 | + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' + item.widthTolPos : item.widthTolPos }} | ||
| 175 | + </view> | ||
| 176 | + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' + item.widthTolNeg : item.widthTolNeg }} | ||
| 177 | + </view> | ||
| 178 | + </view> | ||
| 179 | + <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 180 | + <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 181 | + <view v-if="item.length" class="value-spec_box"> | ||
| 182 | + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' + item.lengthTolPos : item.lengthTolPos }} | ||
| 183 | + </view> | ||
| 184 | + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' + item.lengthTolNeg : item.lengthTolNeg }} | ||
| 182 | </view> | 185 | </view> |
| 183 | </view> | 186 | </view> |
| 184 | </view> | 187 | </view> |
| 188 | + </view> | ||
| 185 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> | 189 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> |
| 186 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> | 190 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> |
| 187 | <view class="row"><text class="label">单价</text><text class="value">{{ formatCurrency(item.unitPrice) | 191 | <view class="row"><text class="label">单价</text><text class="value">{{ formatCurrency(item.unitPrice) |
| @@ -247,20 +251,18 @@ export default { | @@ -247,20 +251,18 @@ export default { | ||
| 247 | })) | 251 | })) |
| 248 | }, | 252 | }, |
| 249 | minDeliveryDate() { | 253 | minDeliveryDate() { |
| 250 | - const s = this.deliveryDate | ||
| 251 | - if (!s) return '' | ||
| 252 | - const parts = String(s).split('-') | ||
| 253 | - const y = Number(parts[0]) | ||
| 254 | - const m = Number(parts[1]) | ||
| 255 | - const d = Number(parts[2]) | ||
| 256 | - if (!y || !m || !d) return '' | ||
| 257 | - const dt = new Date(y, m - 1, d) | ||
| 258 | - dt.setDate(dt.getDate() + 1) | ||
| 259 | - const yy = dt.getFullYear() | ||
| 260 | - const mm = String(dt.getMonth() + 1).padStart(2, '0') | ||
| 261 | - const dd = String(dt.getDate() - 1).padStart(2, '0') | ||
| 262 | - return `${yy}/${mm}/${dd}` | ||
| 263 | - } | 254 | + const s = this.deliveryDate |
| 255 | + if (!s) return '' | ||
| 256 | + const parts = String(s).split('-') | ||
| 257 | + const y = Number(parts[0]) | ||
| 258 | + const m = Number(parts[1]) | ||
| 259 | + const d = Number(parts[2]) | ||
| 260 | + if (!y || !m || !d) return '' | ||
| 261 | + const yy = y | ||
| 262 | + const mm = String(m).padStart(2, '0') | ||
| 263 | + const dd = String(d).padStart(2, '0') | ||
| 264 | + return `${yy}-${mm}-${dd}` | ||
| 265 | + } | ||
| 264 | }, | 266 | }, |
| 265 | methods: { | 267 | methods: { |
| 266 | defaultItem() { | 268 | defaultItem() { |
| @@ -62,9 +62,9 @@ | @@ -62,9 +62,9 @@ | ||
| 62 | </template> | 62 | </template> |
| 63 | </uni-list-item> | 63 | </uni-list-item> |
| 64 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" @change="onProductsChange" :options="productList" /> | 64 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" @change="onProductsChange" :options="productList" /> |
| 65 | - <uni-list-item title="合计人民币金额(大写)"> | 65 | + <uni-list-item title="合计金额(大写)"> |
| 66 | <template v-slot:footer> | 66 | <template v-slot:footer> |
| 67 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" disabled /> | 67 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" disabled /> |
| 68 | </template> | 68 | </template> |
| 69 | </uni-list-item> | 69 | </uni-list-item> |
| 70 | <uni-list-item title="交付定金、数额、时间"> | 70 | <uni-list-item title="交付定金、数额、时间"> |
| @@ -557,7 +557,7 @@ export default { | @@ -557,7 +557,7 @@ export default { | ||
| 557 | if (this.$refs.productRel && !this.$refs.productRel.validate()) return | 557 | if (this.$refs.productRel && !this.$refs.productRel.validate()) return |
| 558 | if (!this.validateRequired()) return | 558 | if (!this.validateRequired()) return |
| 559 | const confirmRes = await new Promise(resolve => { | 559 | const confirmRes = await new Promise(resolve => { |
| 560 | - uni.showModal({ title: '提示', content: '确定新增经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 560 | + uni.showModal({ title: '提示', content: '确定新增外贸未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 561 | }) | 561 | }) |
| 562 | if (!(confirmRes && confirmRes.confirm)) return | 562 | if (!(confirmRes && confirmRes.confirm)) return |
| 563 | const clean = (obj) => { | 563 | const clean = (obj) => { |
| @@ -40,7 +40,7 @@ | @@ -40,7 +40,7 @@ | ||
| 40 | </view> | 40 | </view> |
| 41 | 41 | ||
| 42 | <view class="section"> | 42 | <view class="section"> |
| 43 | - <view class="row"><text class="label">合计人民币金额(大写)</text><text class="value">{{ | 43 | + <view class="row"><text class="label">合计金额(大写)</text><text class="value">{{ |
| 44 | detail.totalAmountCapital || '-' }}</text></view> | 44 | detail.totalAmountCapital || '-' }}</text></view> |
| 45 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || | 45 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || |
| 46 | '-' }}</text></view> | 46 | '-' }}</text></view> |
| @@ -73,7 +73,9 @@ | @@ -73,7 +73,9 @@ | ||
| 73 | </view> | 73 | </view> |
| 74 | 74 | ||
| 75 | <view class="section" v-if="detail.status === 'STANDARD'"> | 75 | <view class="section" v-if="detail.status === 'STANDARD'"> |
| 76 | - <view class="row"><text class="label">规范性合同</text><text class="value" style="color: #3D48A3;">{{ | 76 | + <view class="row"><text class="label">双方盖章合同</text><text class="value act" @click="downloadFile(detail.signedContractFileId, detail.signedContractFileName)">{{ |
| 77 | + detail.signedContractFileName || '-' }}</text></view> | ||
| 78 | + <view class="row"><text class="label">规范性合同</text><text class="value act" @click="downloadFile(detail.standardFileId, detail.standardFileName)">{{ | ||
| 77 | detail.standardFileName || '-' | 79 | detail.standardFileName || '-' |
| 78 | }}</text></view> | 80 | }}</text></view> |
| 79 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ | 81 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ |
| @@ -81,7 +83,7 @@ | @@ -81,7 +83,7 @@ | ||
| 81 | }}</text></view> | 83 | }}</text></view> |
| 82 | </view> | 84 | </view> |
| 83 | <view class="section" v-if="detail.status === 'FORMAL'"> | 85 | <view class="section" v-if="detail.status === 'FORMAL'"> |
| 84 | - <view class="row"><text class="label">规范性合同</text><text class="value" style="color: #3D48A3;">{{ | 86 | + <view class="row"><text class="label">规范性合同</text><text class="value act" @click="downloadFile(detail.formalFileId, detail.formalFileName)">{{ |
| 85 | detail.formalFileName || '-' }}</text></view> | 87 | detail.formalFileName || '-' }}</text></view> |
| 86 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ detail.formalStandardized | 88 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ detail.formalStandardized |
| 87 | ? '是' : '否' }}</text></view> | 89 | ? '是' : '否' }}</text></view> |
| @@ -139,6 +141,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | @@ -139,6 +141,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | ||
| 139 | import FileUpload from '@/components/file-upload/index.vue' | 141 | import FileUpload from '@/components/file-upload/index.vue' |
| 140 | import SingleSelectSheet from '@/components/single-select/index.vue' | 142 | import SingleSelectSheet from '@/components/single-select/index.vue' |
| 141 | import { fillStandardApprovedName, fillFormalApprovedName } from '@/utils/dic.js' | 143 | import { fillStandardApprovedName, fillFormalApprovedName } from '@/utils/dic.js' |
| 144 | +import { downloadFile } from '@/utils/downloadFile.js' | ||
| 142 | 145 | ||
| 143 | export default { | 146 | export default { |
| 144 | name: 'ContractForeignUnplanDetail', | 147 | name: 'ContractForeignUnplanDetail', |
| @@ -301,13 +304,13 @@ export default { | @@ -301,13 +304,13 @@ export default { | ||
| 301 | { ...this.buttons[4], visible: ((s === 'DRAFT' || s === 'FORMAL') && a !== 'AUDIT' && a !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:upload')) }, //上传正式合同附件 | 304 | { ...this.buttons[4], visible: ((s === 'DRAFT' || s === 'FORMAL') && a !== 'AUDIT' && a !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:upload')) }, //上传正式合同附件 |
| 302 | { ...this.buttons[5], visible: (s === 'STANDARD' && a !== 'AUDIT' && a !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:upload')) }, //上传正式合同附件 | 305 | { ...this.buttons[5], visible: (s === 'STANDARD' && a !== 'AUDIT' && a !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:upload')) }, //上传正式合同附件 |
| 303 | { ...this.buttons[6], visible: (s === 'STANDARD' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:standard-upload')) }, //上传标准合同附件 | 306 | { ...this.buttons[6], visible: (s === 'STANDARD' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:standard-upload')) }, //上传标准合同附件 |
| 304 | - { ...this.buttons[7], visible: (s === 'FORMAL' && e && a === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:approve')) }, //审核正式合同 | ||
| 305 | - { ...this.buttons[8], visible: (s === 'STANDARD' && e && a === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:approve')) }, //审核正式合同 | ||
| 306 | - { ...this.buttons[9], visible: (s === 'STANDARD' && f && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:standard-approve')) }, //审核标准合同 | ||
| 307 | { ...this.buttons[10], visible: (s === 'FORMAL' && a && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:review')) }, //正式合同审核详情 | 307 | { ...this.buttons[10], visible: (s === 'FORMAL' && a && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:review')) }, //正式合同审核详情 |
| 308 | { ...this.buttons[11], visible: (s === 'STANDARD' && a && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:review')) }, //正式合同审核详情 | 308 | { ...this.buttons[11], visible: (s === 'STANDARD' && a && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:review')) }, //正式合同审核详情 |
| 309 | { ...this.buttons[12], visible: (s === 'STANDARD' && t && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:standard-review')) }, //标准合同审核详情 | 309 | { ...this.buttons[12], visible: (s === 'STANDARD' && t && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:standard-review')) }, //标准合同审核详情 |
| 310 | - { ...this.buttons[13], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-unlcoked-contract:upload-seal')) }, //上传双方盖章合同附件 | 310 | + { ...this.buttons[13], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:upload-seal')) }, //上传双方盖章合同附件 |
| 311 | + { ...this.buttons[7], visible: (s === 'FORMAL' && e && a === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:approve')) }, //审核正式合同 | ||
| 312 | + { ...this.buttons[8], visible: (s === 'STANDARD' && e && a === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:approve')) }, //审核正式合同 | ||
| 313 | + { ...this.buttons[9], visible: (s === 'STANDARD' && f && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:foreign-trade-unlocked-contract:standard-approve')) }, //审核标准合同 | ||
| 311 | ] | 314 | ] |
| 312 | } | 315 | } |
| 313 | }, | 316 | }, |
| @@ -385,7 +388,7 @@ export default { | @@ -385,7 +388,7 @@ export default { | ||
| 385 | }) | 388 | }) |
| 386 | return | 389 | return |
| 387 | } | 390 | } |
| 388 | - if (!this.standardStandardized && this.uploadType !== 'seal') { | 391 | + if (!this.standardStandardized && this.standardStandardized !== false && this.uploadType !== 'seal') { |
| 389 | uni.showToast({ | 392 | uni.showToast({ |
| 390 | title: '请选择合同是否规范', | 393 | title: '请选择合同是否规范', |
| 391 | icon: 'error' | 394 | icon: 'error' |
| @@ -444,6 +447,7 @@ export default { | @@ -444,6 +447,7 @@ export default { | ||
| 444 | const match = (options || []).find(o => String(o.value) === String(current) || String(o.label) === String(current)) | 447 | const match = (options || []).find(o => String(o.value) === String(current) || String(o.label) === String(current)) |
| 445 | this.sheet = { ...this.sheet, visible: true, title: '合同是否规范', options, value: match ? match.value : '' } | 448 | this.sheet = { ...this.sheet, visible: true, title: '合同是否规范', options, value: match ? match.value : '' } |
| 446 | }, | 449 | }, |
| 450 | + downloadFile, | ||
| 447 | handleButtonClick(btn) { | 451 | handleButtonClick(btn) { |
| 448 | if (!btn || btn.disabled) return | 452 | if (!btn || btn.disabled) return |
| 449 | if (typeof btn.onClick === 'function') return btn.onClick(this.detail, btn.params) | 453 | if (typeof btn.onClick === 'function') return btn.onClick(this.detail, btn.params) |
| @@ -558,6 +562,10 @@ export default { | @@ -558,6 +562,10 @@ export default { | ||
| 558 | &_已签收 { | 562 | &_已签收 { |
| 559 | background-image: url('~@/static/images/contract/status_4.png'); | 563 | background-image: url('~@/static/images/contract/status_4.png'); |
| 560 | } | 564 | } |
| 565 | + | ||
| 566 | + &_已取消 { | ||
| 567 | + background-image: url('~@/static/images/contract/status_5.png'); | ||
| 568 | + } | ||
| 561 | } | 569 | } |
| 562 | } | 570 | } |
| 563 | 571 | ||
| @@ -577,7 +585,8 @@ export default { | @@ -577,7 +585,8 @@ export default { | ||
| 577 | } | 585 | } |
| 578 | 586 | ||
| 579 | .label { | 587 | .label { |
| 580 | - width: 310rpx; | 588 | + max-width: 310rpx; |
| 589 | + margin-right: 20rpx; | ||
| 581 | color: rgba(0, 0, 0, 0.6); | 590 | color: rgba(0, 0, 0, 0.6); |
| 582 | font-size: 28rpx; | 591 | font-size: 28rpx; |
| 583 | } | 592 | } |
| @@ -587,6 +596,11 @@ export default { | @@ -587,6 +596,11 @@ export default { | ||
| 587 | text-align: right; | 596 | text-align: right; |
| 588 | color: rgba(0, 0, 0, 0.9); | 597 | color: rgba(0, 0, 0, 0.9); |
| 589 | font-size: 28rpx; | 598 | font-size: 28rpx; |
| 599 | + white-space: pre-wrap; | ||
| 600 | + word-break: break-all; | ||
| 601 | + &.act { | ||
| 602 | + color: $theme-primary; | ||
| 603 | + } | ||
| 590 | } | 604 | } |
| 591 | 605 | ||
| 592 | .customer { | 606 | .customer { |
| @@ -650,4 +664,7 @@ export default { | @@ -650,4 +664,7 @@ export default { | ||
| 650 | color: rgba(0, 0, 0, 0.6); | 664 | color: rgba(0, 0, 0, 0.6); |
| 651 | font-size: 32rpx; | 665 | font-size: 32rpx; |
| 652 | } | 666 | } |
| 667 | +.upload-row { | ||
| 668 | + margin-top: 20rpx; | ||
| 669 | +} | ||
| 653 | </style> | 670 | </style> |
| @@ -49,7 +49,7 @@ | @@ -49,7 +49,7 @@ | ||
| 49 | <view class="card" @click="goDetail(item)"> | 49 | <view class="card" @click="goDetail(item)"> |
| 50 | <view class="card-header"> | 50 | <view class="card-header"> |
| 51 | <text class="title omit2">{{ item.buyerName }}</text> | 51 | <text class="title omit2">{{ item.buyerName }}</text> |
| 52 | - <text v-if="item.status === 'STANDARD'" :class="['status']" :style="{ background: statusMap[item.shippingStatusName] }">{{ item.shippingStatusName }}</text> | 52 | + <text v-if="item.status === 'STANDARD'" :class="['status', 'status_' + item.shippingStatusName]">{{ item.shippingStatusName }}</text> |
| 53 | </view> | 53 | </view> |
| 54 | <view class="info-row"> | 54 | <view class="info-row"> |
| 55 | <text>编号</text><text>{{ item.code }}</text> | 55 | <text>编号</text><text>{{ item.code }}</text> |
| @@ -63,7 +63,7 @@ | @@ -63,7 +63,7 @@ | ||
| 63 | <view class="info-row" v-if="item.status === 'STANDARD' || item.status === 'FORMAL'"> | 63 | <view class="info-row" v-if="item.status === 'STANDARD' || item.status === 'FORMAL'"> |
| 64 | <text>{{ item.status === 'STANDARD' ? '标准合同' : '正式合同' }}规范性审核状态</text> | 64 | <text>{{ item.status === 'STANDARD' ? '标准合同' : '正式合同' }}规范性审核状态</text> |
| 65 | <span v-if="item.status === 'STANDARD' ? item.standardApprovedName : item.formalApprovedName" class="info-status" :style="getStatusCss(item.status === 'STANDARD' ? item.standardApprovedName : item.formalApprovedName)">{{ item.status === 'STANDARD' ? item.standardApprovedName : item.formalApprovedName }}</span> | 65 | <span v-if="item.status === 'STANDARD' ? item.standardApprovedName : item.formalApprovedName" class="info-status" :style="getStatusCss(item.status === 'STANDARD' ? item.standardApprovedName : item.formalApprovedName)">{{ item.status === 'STANDARD' ? item.standardApprovedName : item.formalApprovedName }}</span> |
| 66 | - <span v-else>-</span> | 66 | + <span v-else>-</span> |
| 67 | </view> | 67 | </view> |
| 68 | <view class="info-row"> | 68 | <view class="info-row"> |
| 69 | <text>订货日期</text><text>{{ item.orderDate }}</text> | 69 | <text>订货日期</text><text>{{ item.orderDate }}</text> |
| @@ -96,8 +96,7 @@ | @@ -96,8 +96,7 @@ | ||
| 96 | <script> | 96 | <script> |
| 97 | import CardList from '@/components/card/index.vue' | 97 | import CardList from '@/components/card/index.vue' |
| 98 | import FilterModal from '@/components/filter/index.vue' | 98 | import FilterModal from '@/components/filter/index.vue' |
| 99 | -import { queryContractApi, statusStyle,statusMap } from '@/api/contract.js' | ||
| 100 | -import { officeQueryApi } from '@/api/devManage.js' | 99 | +import { queryContractApi, statusStyle } from '@/api/contract.js' |
| 101 | 100 | ||
| 102 | export default { | 101 | export default { |
| 103 | components: { CardList, FilterModal }, | 102 | components: { CardList, FilterModal }, |
| @@ -117,8 +116,7 @@ export default { | @@ -117,8 +116,7 @@ export default { | ||
| 117 | filterVisible: false, | 116 | filterVisible: false, |
| 118 | filterForm: { deptId: '', deptName: '', dateRange: [] }, | 117 | filterForm: { deptId: '', deptName: '', dateRange: [] }, |
| 119 | deptSelectVisible: false, | 118 | deptSelectVisible: false, |
| 120 | - statusStyle, | ||
| 121 | - statusMap, | 119 | + statusStyle |
| 122 | } | 120 | } |
| 123 | }, | 121 | }, |
| 124 | computed: { | 122 | computed: { |
| @@ -332,26 +330,30 @@ export default { | @@ -332,26 +330,30 @@ export default { | ||
| 332 | font-size: 30rpx; | 330 | font-size: 30rpx; |
| 333 | font-weight: 600; | 331 | font-weight: 600; |
| 334 | position: absolute; | 332 | position: absolute; |
| 335 | - top: -36rpx; | ||
| 336 | - right: -32rpx; | 333 | + top: -32rpx; |
| 334 | + right: -12rpx; | ||
| 337 | height: 48rpx; | 335 | height: 48rpx; |
| 338 | - line-height: 48rpx; | 336 | + line-height: 50rpx; |
| 339 | color: #fff; | 337 | color: #fff; |
| 340 | font-size: 24rpx; | 338 | font-size: 24rpx; |
| 341 | padding: 0 14rpx; | 339 | padding: 0 14rpx; |
| 342 | border-radius: 6rpx; | 340 | border-radius: 6rpx; |
| 343 | - &.status_1 { | 341 | + &_审批中 { |
| 344 | background: $theme-primary; | 342 | background: $theme-primary; |
| 345 | } | 343 | } |
| 346 | - &.status_2 { | 344 | + &_生产中 { |
| 347 | background: #2BA471; | 345 | background: #2BA471; |
| 348 | } | 346 | } |
| 349 | - &.status_3 { | ||
| 350 | - background: #D54941; | 347 | + &_已发货 { |
| 348 | + background: #E37318; | ||
| 351 | } | 349 | } |
| 352 | - &.status_4 { | ||
| 353 | - background: #E7E7E7; | ||
| 354 | - color: rgba(0,0,0,0.9); | 350 | + &_已签收 { |
| 351 | + background: #858A99; | ||
| 352 | + color: #ffffff; | ||
| 353 | + } | ||
| 354 | + &_已取消 { | ||
| 355 | + background: #9E9E9E; | ||
| 356 | + color: #ffffff; | ||
| 355 | } | 357 | } |
| 356 | } | 358 | } |
| 357 | } | 359 | } |
| @@ -382,19 +384,19 @@ export default { | @@ -382,19 +384,19 @@ export default { | ||
| 382 | } | 384 | } |
| 383 | } | 385 | } |
| 384 | 386 | ||
| 385 | -.filter-form { | 387 | +.filter-form { |
| 386 | .form-item { margin-bottom: 24rpx; } | 388 | .form-item { margin-bottom: 24rpx; } |
| 387 | - .label { | ||
| 388 | - margin-bottom: 20rpx; | 389 | + .label { |
| 390 | + margin-bottom: 20rpx; | ||
| 389 | color: rgba(0,0,0,0.9); | 391 | color: rgba(0,0,0,0.9); |
| 390 | height: 44rpx; | 392 | height: 44rpx; |
| 391 | line-height: 44rpx; | 393 | line-height: 44rpx; |
| 392 | font-size: 30rpx; | 394 | font-size: 30rpx; |
| 393 | } | 395 | } |
| 394 | - .fake-select { | ||
| 395 | - height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | 396 | + .fake-select { |
| 397 | + height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | ||
| 396 | .placeholder { color: #999; } | 398 | .placeholder { color: #999; } |
| 397 | .value { color: #333; } | 399 | .value { color: #333; } |
| 398 | } | 400 | } |
| 399 | } | 401 | } |
| 400 | -</style> | ||
| 402 | +</style> |
| @@ -4,13 +4,8 @@ | @@ -4,13 +4,8 @@ | ||
| 4 | <view class="lock-page"> | 4 | <view class="lock-page"> |
| 5 | <view class="block" v-for="(item, idx) in items" :key="idx"> | 5 | <view class="block" v-for="(item, idx) in items" :key="idx"> |
| 6 | <view class="block-header"> | 6 | <view class="block-header"> |
| 7 | - <uni-data-checkbox | ||
| 8 | - multiple | ||
| 9 | - mode="default" | ||
| 10 | - :localdata="[{ text: '锁规', value: 'LOCKED' }]" | ||
| 11 | - :modelValue="item.locked ? ['LOCKED'] : []" | ||
| 12 | - @change="onLockChange(idx, $event)" | ||
| 13 | - /> | 7 | + <uni-data-checkbox multiple mode="default" :localdata="[{ text: '锁规', value: 'LOCKED' }]" |
| 8 | + :modelValue="item.locked ? ['LOCKED'] : []" @change="onLockChange(idx, $event)" /> | ||
| 14 | <view class="ops" @click="toggleItem(idx)"> | 9 | <view class="ops" @click="toggleItem(idx)"> |
| 15 | <image class="opIcon" | 10 | <image class="opIcon" |
| 16 | :src="item.collapsed ? '/static/images/up.png' : '/static/images/down.png'" /> | 11 | :src="item.collapsed ? '/static/images/up.png' : '/static/images/down.png'" /> |
| @@ -21,12 +16,14 @@ | @@ -21,12 +16,14 @@ | ||
| 21 | <uni-list v-show="item.collapsed"> | 16 | <uni-list v-show="item.collapsed"> |
| 22 | <uni-list-item title="产品名称"> | 17 | <uni-list-item title="产品名称"> |
| 23 | <template v-slot:footer> | 18 | <template v-slot:footer> |
| 24 | - <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" disabled /> | 19 | + <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" |
| 20 | + disabled /> | ||
| 25 | </template> | 21 | </template> |
| 26 | </uni-list-item> | 22 | </uni-list-item> |
| 27 | <uni-list-item title="行业"> | 23 | <uni-list-item title="行业"> |
| 28 | <template v-slot:footer> | 24 | <template v-slot:footer> |
| 29 | - <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" disabled /> | 25 | + <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" |
| 26 | + disabled /> | ||
| 30 | </template> | 27 | </template> |
| 31 | </uni-list-item> | 28 | </uni-list-item> |
| 32 | <uni-list-item title="牌号"> | 29 | <uni-list-item title="牌号"> |
| @@ -41,28 +38,39 @@ | @@ -41,28 +38,39 @@ | ||
| 41 | </uni-list-item> | 38 | </uni-list-item> |
| 42 | <uni-list-item title="规格(mm)"> | 39 | <uni-list-item title="规格(mm)"> |
| 43 | <template v-slot:footer> | 40 | <template v-slot:footer> |
| 44 | - <!-- <uni-easyinput v-model="item.specDisplay" placeholder="自动拼接规格" :clearable="false" disabled /> --> | ||
| 45 | - <view class="value value-spec"> | ||
| 46 | - <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 47 | - <view v-if="item.thickness" class="value-spec_box"> | ||
| 48 | - <view v-if="item.thicknessTolPos" class="value-spec_box_1">+{{ item.thicknessTolPos }} | 41 | + <view class="value value-spec"> |
| 42 | + <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 43 | + <view v-if="item.thickness" class="value-spec_box"> | ||
| 44 | + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ | ||
| 45 | + item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos | ||
| 46 | + }} | ||
| 47 | + </view> | ||
| 48 | + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ | ||
| 49 | + item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg | ||
| 50 | + }} | ||
| 51 | + </view> | ||
| 52 | + </view> | ||
| 53 | + <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 54 | + <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 55 | + <view v-if="item.width" class="value-spec_box"> | ||
| 56 | + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? | ||
| 57 | + '+' + item.widthTolPos : item.widthTolPos }} | ||
| 58 | + </view> | ||
| 59 | + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? | ||
| 60 | + '+' + item.widthTolNeg : item.widthTolNeg }} | ||
| 61 | + </view> | ||
| 62 | + </view> | ||
| 63 | + <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 64 | + <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 65 | + <view v-if="item.length" class="value-spec_box"> | ||
| 66 | + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 | ||
| 67 | + ? '+' + item.lengthTolPos : item.lengthTolPos }} | ||
| 68 | + </view> | ||
| 69 | + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 | ||
| 70 | + ? '+' + item.lengthTolNeg : item.lengthTolNeg }} | ||
| 71 | + </view> | ||
| 72 | + </view> | ||
| 49 | </view> | 73 | </view> |
| 50 | - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">-{{ item.thicknessTolNeg }} | ||
| 51 | - </view> | ||
| 52 | - </view> | ||
| 53 | - <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 54 | - <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 55 | - <view v-if="item.width" class="value-spec_box"> | ||
| 56 | - <view v-if="item.widthTolPos" class="value-spec_box_1">+{{ item.widthTolPos }}</view> | ||
| 57 | - <view v-if="item.widthTolNeg" class="value-spec_box_2">-{{ item.widthTolNeg }}</view> | ||
| 58 | - </view> | ||
| 59 | - <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 60 | - <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 61 | - <view v-if="item.length" class="value-spec_box"> | ||
| 62 | - <view v-if="item.lengthTolPos" class="value-spec_box_1">+{{ item.lengthTolPos }}</view> | ||
| 63 | - <view v-if="item.lengthTolNeg" class="value-spec_box_2">-{{ item.lengthTolNeg }}</view> | ||
| 64 | - </view> | ||
| 65 | - </view> | ||
| 66 | </template> | 74 | </template> |
| 67 | </uni-list-item> | 75 | </uni-list-item> |
| 68 | <uni-list-item title="状态"> | 76 | <uni-list-item title="状态"> |
| @@ -72,27 +80,32 @@ | @@ -72,27 +80,32 @@ | ||
| 72 | </uni-list-item> | 80 | </uni-list-item> |
| 73 | <uni-list-item title="数量"> | 81 | <uni-list-item title="数量"> |
| 74 | <template v-slot:footer> | 82 | <template v-slot:footer> |
| 75 | - <uni-easyinput v-model="item.quantity" type="number" :inputBorder="false" placeholder="请输入数量" @input="onImmediateChange(idx)" @blur="onNumberBlur(idx, 'quantity', 0)" /> | 83 | + <uni-easyinput v-model="item.quantity" type="number" :inputBorder="false" |
| 84 | + placeholder="请输入数量" @input="onImmediateChange(idx)" | ||
| 85 | + @blur="onNumberBlur(idx, 'quantity', 0)" /> | ||
| 76 | </template> | 86 | </template> |
| 77 | </uni-list-item> | 87 | </uni-list-item> |
| 78 | <uni-list-item title="单价"> | 88 | <uni-list-item title="单价"> |
| 79 | <template v-slot:footer> | 89 | <template v-slot:footer> |
| 80 | - <uni-easyinput v-model="item.unitPrice" type="number" :inputBorder="false" placeholder="请输入单价" @input="onImmediateChange(idx)" @blur="onNumberBlur(idx, 'unitPrice', 0)" /> | 90 | + <uni-easyinput v-model="item.unitPrice" type="number" :inputBorder="false" |
| 91 | + placeholder="请输入单价" @input="onImmediateChange(idx)" | ||
| 92 | + @blur="onNumberBlur(idx, 'unitPrice', 0)" /> | ||
| 81 | </template> | 93 | </template> |
| 82 | </uni-list-item> | 94 | </uni-list-item> |
| 83 | <!-- <uni-list-item title="不含税金额"> | 95 | <!-- <uni-list-item title="不含税金额"> |
| 84 | <template v-slot:footer> | 96 | <template v-slot:footer> |
| 85 | - <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 97 | + <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="" /> |
| 86 | </template> | 98 | </template> |
| 87 | </uni-list-item> --> | 99 | </uni-list-item> --> |
| 88 | <uni-list-item title="总金额"> | 100 | <uni-list-item title="总金额"> |
| 89 | <template v-slot:footer> | 101 | <template v-slot:footer> |
| 90 | - <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 102 | + <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled |
| 103 | + placeholder="" /> | ||
| 91 | </template> | 104 | </template> |
| 92 | </uni-list-item> | 105 | </uni-list-item> |
| 93 | <uni-list-item title="发货日期"> | 106 | <uni-list-item title="发货日期"> |
| 94 | <template v-slot:footer> | 107 | <template v-slot:footer> |
| 95 | - <uni-easyinput v-model="item.deliveryDate" :inputBorder="false" disabled /> | 108 | + <uni-easyinput v-model="item.deliveryDate" :inputBorder="false" disabled /> |
| 96 | </template> | 109 | </template> |
| 97 | </uni-list-item> | 110 | </uni-list-item> |
| 98 | </uni-list> | 111 | </uni-list> |
| @@ -100,12 +113,14 @@ | @@ -100,12 +113,14 @@ | ||
| 100 | <uni-list v-show="!item.collapsed"> | 113 | <uni-list v-show="!item.collapsed"> |
| 101 | <uni-list-item title="产品名称"> | 114 | <uni-list-item title="产品名称"> |
| 102 | <template v-slot:footer> | 115 | <template v-slot:footer> |
| 103 | - <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" disabled /> | 116 | + <uni-easyinput v-model="item.productName" placeholder="请输入产品名称" :clearable="false" |
| 117 | + disabled /> | ||
| 104 | </template> | 118 | </template> |
| 105 | </uni-list-item> | 119 | </uni-list-item> |
| 106 | <uni-list-item title="行业"> | 120 | <uni-list-item title="行业"> |
| 107 | <template v-slot:footer> | 121 | <template v-slot:footer> |
| 108 | - <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" disabled /> | 122 | + <uni-easyinput v-model="item.industry" placeholder="请输入行业" :clearable="false" |
| 123 | + disabled /> | ||
| 109 | </template> | 124 | </template> |
| 110 | </uni-list-item> | 125 | </uni-list-item> |
| 111 | <uni-list-item title="牌号"> | 126 | <uni-list-item title="牌号"> |
| @@ -113,40 +128,41 @@ | @@ -113,40 +128,41 @@ | ||
| 113 | <uni-easyinput v-model="item.brand" placeholder="请输入牌号" :clearable="false" disabled /> | 128 | <uni-easyinput v-model="item.brand" placeholder="请输入牌号" :clearable="false" disabled /> |
| 114 | </template> | 129 | </template> |
| 115 | </uni-list-item> | 130 | </uni-list-item> |
| 116 | - <view class="footer"> | ||
| 117 | - <div class="total"> | ||
| 118 | - <div class="total-text"> | ||
| 119 | - 合计 | ||
| 120 | - </div> | ||
| 121 | - <div class="total-item"> | ||
| 122 | - <div class="total-item-text"> | ||
| 123 | - 数量 | ||
| 124 | - </div> | ||
| 125 | - <div class="total-item-price"> | ||
| 126 | - {{ (totalQuantity || 0).toFixed(2) }}kg | ||
| 127 | - </div> | ||
| 128 | - </div> | ||
| 129 | - <!-- <div class="total-item"> | ||
| 130 | - <div class="total-item-text"> | ||
| 131 | - 不含税金额 | ||
| 132 | - </div> | ||
| 133 | - <div class="total-item-price text-red"> | ||
| 134 | - ¥{{ (totalAmountExcludingTax || 0).toFixed(2) }} | ||
| 135 | - </div> | ||
| 136 | - </div> --> | ||
| 137 | - <div class="total-item"> | ||
| 138 | - <div class="total-item-text"> | ||
| 139 | - 总金额 | ||
| 140 | - </div> | ||
| 141 | - <div class="total-item-price text-red"> | ||
| 142 | - ¥{{ (totalAmountIncludingTax || 0).toFixed(2) }} | ||
| 143 | - </div> | ||
| 144 | - </div> | ||
| 145 | - </div> | ||
| 146 | - <button class="btn submit" type="primary" @click="onSubmit">提交</button> | ||
| 147 | - </view> | 131 | + |
| 148 | </uni-list> | 132 | </uni-list> |
| 149 | </view> | 133 | </view> |
| 134 | + <view class="footer"> | ||
| 135 | + <div class="total"> | ||
| 136 | + <div class="total-text"> | ||
| 137 | + 合计 | ||
| 138 | + </div> | ||
| 139 | + <div class="total-item"> | ||
| 140 | + <div class="total-item-text"> | ||
| 141 | + 数量 | ||
| 142 | + </div> | ||
| 143 | + <div class="total-item-price"> | ||
| 144 | + {{ (totalQuantity || 0).toFixed(2) }}kg | ||
| 145 | + </div> | ||
| 146 | + </div> | ||
| 147 | + <!-- <div class="total-item"> | ||
| 148 | + <div class="total-item-text"> | ||
| 149 | + 不含税金额 | ||
| 150 | + </div> | ||
| 151 | + <div class="total-item-price text-red"> | ||
| 152 | + ¥{{ (totalAmountExcludingTax || 0).toFixed(2) }} | ||
| 153 | + </div> | ||
| 154 | + </div> --> | ||
| 155 | + <div class="total-item"> | ||
| 156 | + <div class="total-item-text"> | ||
| 157 | + 总金额 | ||
| 158 | + </div> | ||
| 159 | + <div class="total-item-price text-red"> | ||
| 160 | + ¥{{ (totalAmountIncludingTax || 0).toFixed(2) }} | ||
| 161 | + </div> | ||
| 162 | + </div> | ||
| 163 | + </div> | ||
| 164 | + <button class="btn submit" type="primary" @click="onSubmit">提交</button> | ||
| 165 | + </view> | ||
| 150 | </view> | 166 | </view> |
| 151 | </scroll-view> | 167 | </scroll-view> |
| 152 | 168 | ||
| @@ -166,7 +182,7 @@ export default { | @@ -166,7 +182,7 @@ export default { | ||
| 166 | planQty: 30, | 182 | planQty: 30, |
| 167 | } | 183 | } |
| 168 | }, | 184 | }, |
| 169 | - computed: { | 185 | + computed: { |
| 170 | totalQuantity() { | 186 | totalQuantity() { |
| 171 | const qty = this.items.filter(it => it.locked).reduce((p, c) => p + this.toNumber(c.quantity), 0) | 187 | const qty = this.items.filter(it => it.locked).reduce((p, c) => p + this.toNumber(c.quantity), 0) |
| 172 | return this.round(qty, 2) | 188 | return this.round(qty, 2) |
| @@ -349,7 +365,7 @@ export default { | @@ -349,7 +365,7 @@ export default { | ||
| 349 | // totalAmountExcludingTax: this.totalAmountExcludingTax, | 365 | // totalAmountExcludingTax: this.totalAmountExcludingTax, |
| 350 | totalAmountIncludingTax: this.totalAmountIncludingTax, | 366 | totalAmountIncludingTax: this.totalAmountIncludingTax, |
| 351 | totalQuantity: this.totalQuantity, | 367 | totalQuantity: this.totalQuantity, |
| 352 | - type:'INTL_OPEN_SPEC_AGMT', | 368 | + type: 'INTL_OPEN_SPEC_AGMT', |
| 353 | contractDistributorLineList: selected | 369 | contractDistributorLineList: selected |
| 354 | } | 370 | } |
| 355 | 371 | ||
| @@ -364,7 +380,7 @@ export default { | @@ -364,7 +380,7 @@ export default { | ||
| 364 | uni.navigateTo({ url: '/pages/contract_foreign_unplan/index' }) | 380 | uni.navigateTo({ url: '/pages/contract_foreign_unplan/index' }) |
| 365 | }, 500) | 381 | }, 500) |
| 366 | }).catch((err) => { | 382 | }).catch((err) => { |
| 367 | - uni.showToast({ title: err.msg ||'提交失败', icon: 'none' }) | 383 | + uni.showToast({ title: err.msg || '提交失败', icon: 'none' }) |
| 368 | }) | 384 | }) |
| 369 | } | 385 | } |
| 370 | } | 386 | } |
| @@ -423,6 +439,7 @@ export default { | @@ -423,6 +439,7 @@ export default { | ||
| 423 | width: 36rpx; | 439 | width: 36rpx; |
| 424 | height: 36rpx; | 440 | height: 36rpx; |
| 425 | } | 441 | } |
| 442 | + | ||
| 426 | .block-header ::v-deep .uni-data-checklist .checklist-text { | 443 | .block-header ::v-deep .uni-data-checklist .checklist-text { |
| 427 | font-size: 28rpx; | 444 | font-size: 28rpx; |
| 428 | margin-left: 12rpx; | 445 | margin-left: 12rpx; |
| @@ -555,6 +572,7 @@ export default { | @@ -555,6 +572,7 @@ export default { | ||
| 555 | ::v-deep .is-disabled { | 572 | ::v-deep .is-disabled { |
| 556 | background-color: transparent !important; | 573 | background-color: transparent !important; |
| 557 | } | 574 | } |
| 575 | + | ||
| 558 | // ::v-deep .uni-list-item__content-title { | 576 | // ::v-deep .uni-list-item__content-title { |
| 559 | // font-size: 28rpx; | 577 | // font-size: 28rpx; |
| 560 | // color: rgba(0, 0, 0, 0.9); | 578 | // color: rgba(0, 0, 0, 0.9); |
| @@ -720,42 +738,45 @@ export default { | @@ -720,42 +738,45 @@ export default { | ||
| 720 | background: $theme-primary; | 738 | background: $theme-primary; |
| 721 | color: #fff; | 739 | color: #fff; |
| 722 | } | 740 | } |
| 741 | + | ||
| 723 | .value-spec { | 742 | .value-spec { |
| 743 | + height: 48rpx; | ||
| 744 | + display: flex; | ||
| 745 | + align-items: center; | ||
| 746 | + color: #000000; | ||
| 747 | + | ||
| 748 | + // justify-content: end; | ||
| 749 | + &_box { | ||
| 750 | + position: relative; | ||
| 751 | + width: 60rpx; | ||
| 724 | height: 48rpx; | 752 | height: 48rpx; |
| 725 | - display: flex; | ||
| 726 | - align-items: center; | ||
| 727 | - color: #000000; | ||
| 728 | - // justify-content: end; | ||
| 729 | - &_box { | ||
| 730 | - position: relative; | ||
| 731 | - width: 60rpx; | ||
| 732 | - height: 48rpx; | ||
| 733 | - | ||
| 734 | - &_1 { | ||
| 735 | - font-size: 16rpx; | ||
| 736 | - position: absolute; | ||
| 737 | - top: -10rpx; | ||
| 738 | - left: 0; | ||
| 739 | - } | ||
| 740 | 753 | ||
| 741 | - &_2 { | ||
| 742 | - font-size: 16rpx; | ||
| 743 | - position: absolute; | ||
| 744 | - bottom: -10rpx; | ||
| 745 | - left: 0; | ||
| 746 | - } | 754 | + &_1 { |
| 755 | + font-size: 16rpx; | ||
| 756 | + position: absolute; | ||
| 757 | + top: -10rpx; | ||
| 758 | + left: 0; | ||
| 747 | } | 759 | } |
| 748 | 760 | ||
| 749 | - &_val { | ||
| 750 | - font-size: 28rpx; | ||
| 751 | - | ||
| 752 | - &.p12 { | ||
| 753 | - padding-right: 12rpx; | ||
| 754 | - } | 761 | + &_2 { |
| 762 | + font-size: 16rpx; | ||
| 763 | + position: absolute; | ||
| 764 | + bottom: -10rpx; | ||
| 765 | + left: 0; | ||
| 755 | } | 766 | } |
| 756 | } | 767 | } |
| 757 | - .row-spec { | ||
| 758 | - height: 60rpx; | ||
| 759 | - align-items: center; | 768 | + |
| 769 | + &_val { | ||
| 770 | + font-size: 28rpx; | ||
| 771 | + | ||
| 772 | + &.p12 { | ||
| 773 | + padding-right: 12rpx; | ||
| 760 | } | 774 | } |
| 775 | + } | ||
| 776 | +} | ||
| 777 | + | ||
| 778 | +.row-spec { | ||
| 779 | + height: 60rpx; | ||
| 780 | + align-items: center; | ||
| 781 | +} | ||
| 761 | </style> | 782 | </style> |
| @@ -56,7 +56,7 @@ | @@ -56,7 +56,7 @@ | ||
| 56 | <uni-list> | 56 | <uni-list> |
| 57 | <uni-list-item title="现申请锁规格日期"> | 57 | <uni-list-item title="现申请锁规格日期"> |
| 58 | <template v-slot:footer> | 58 | <template v-slot:footer> |
| 59 | - <uni-datetime-picker type="date" v-model="form.specLockDate" /> | 59 | + <uni-datetime-picker :start="minDate" type="date" v-model="form.specLockDate" /> |
| 60 | </template> | 60 | </template> |
| 61 | </uni-list-item> | 61 | </uni-list-item> |
| 62 | <uni-list-item title="延迟原因"> | 62 | <uni-list-item title="延迟原因"> |
| @@ -97,6 +97,16 @@ export default { | @@ -97,6 +97,16 @@ export default { | ||
| 97 | form: { specLockDate: '', delayReason: '' } | 97 | form: { specLockDate: '', delayReason: '' } |
| 98 | } | 98 | } |
| 99 | }, | 99 | }, |
| 100 | + computed: { | ||
| 101 | + minDate() { | ||
| 102 | + const now = new Date() | ||
| 103 | + now.setDate(now.getDate() + 1) | ||
| 104 | + const y = now.getFullYear() | ||
| 105 | + const m = String(now.getMonth() + 1).padStart(2, '0') | ||
| 106 | + const d = String(now.getDate()).padStart(2, '0') | ||
| 107 | + return `${y}-${m}-${d}` | ||
| 108 | + } | ||
| 109 | + }, | ||
| 100 | onLoad(options) { | 110 | onLoad(options) { |
| 101 | const id = options && options.id ? options.id : '' | 111 | const id = options && options.id ? options.id : '' |
| 102 | this.id = id | 112 | this.id = id |
| @@ -66,9 +66,9 @@ | @@ -66,9 +66,9 @@ | ||
| 66 | 66 | ||
| 67 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" :list="productLineList" @change="onProductsChange" :options="productList" /> | 67 | <ProductRel ref="productRel" mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" :list="productLineList" @change="onProductsChange" :options="productList" /> |
| 68 | 68 | ||
| 69 | - <uni-list-item title="合计人民币金额(大写)"> | 69 | + <uni-list-item title="合计金额(大写)"> |
| 70 | <template v-slot:footer> | 70 | <template v-slot:footer> |
| 71 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" | 71 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" |
| 72 | disabled /> | 72 | disabled /> |
| 73 | </template> | 73 | </template> |
| 74 | </uni-list-item> | 74 | </uni-list-item> |
| @@ -533,7 +533,7 @@ export default { | @@ -533,7 +533,7 @@ export default { | ||
| 533 | if (!this.validateRequired()) return | 533 | if (!this.validateRequired()) return |
| 534 | if (this.$refs.productRel && !this.$refs.productRel.validate()) return | 534 | if (this.$refs.productRel && !this.$refs.productRel.validate()) return |
| 535 | const confirmRes = await new Promise(resolve => { | 535 | const confirmRes = await new Promise(resolve => { |
| 536 | - uni.showModal({ title: '提示', content: '确定保存当前经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 536 | + uni.showModal({ title: '提示', content: '确定保存当前外贸未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 537 | }) | 537 | }) |
| 538 | if (!(confirmRes && confirmRes.confirm)) return | 538 | if (!(confirmRes && confirmRes.confirm)) return |
| 539 | const clean = (obj) => { | 539 | const clean = (obj) => { |
| @@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
| 7 | <image v-if="mode === 'add'" class="opAdd" @click="onAdd" src="/static/images/plus.png" /> | 7 | <image v-if="mode === 'add'" class="opAdd" @click="onAdd" src="/static/images/plus.png" /> |
| 8 | <view v-if="mode === 'view'" class="op1" @click="toggleViewCollapse"> | 8 | <view v-if="mode === 'view'" class="op1" @click="toggleViewCollapse"> |
| 9 | <image class="opAdd" :src="collapsedView ? '/static/images/down.png' : '/static/images/up.png'" /> | 9 | <image class="opAdd" :src="collapsedView ? '/static/images/down.png' : '/static/images/up.png'" /> |
| 10 | - <text class="op">{{ collapsedView ? '展开' : '收起'}} </text> | 10 | + <text class="op">{{ collapsedView ? '展开' : '收起'}} </text> |
| 11 | </view> | 11 | </view> |
| 12 | 12 | ||
| 13 | </view> | 13 | </view> |
| @@ -61,13 +61,13 @@ | @@ -61,13 +61,13 @@ | ||
| 61 | <uni-list-item title="厚度公差上限(mm)"> | 61 | <uni-list-item title="厚度公差上限(mm)"> |
| 62 | <template v-slot:footer> | 62 | <template v-slot:footer> |
| 63 | <uni-easyinput type="digit" v-model="item.thicknessTolPos" :inputBorder="false" | 63 | <uni-easyinput type="digit" v-model="item.thicknessTolPos" :inputBorder="false" |
| 64 | - placeholder="请输入厚度公差上限" @input="onNonNegativeInput(idx, 'thicknessTolPos')" @blur="onNonNegativeBlur(idx, 'thicknessTolPos', 9)" /> | 64 | + placeholder="请输入厚度公差上限" @input="onNumberInput(idx, 'thicknessTolPos')" @blur="onNumberBlur(idx, 'thicknessTolPos', 9)" /> |
| 65 | </template> | 65 | </template> |
| 66 | </uni-list-item> | 66 | </uni-list-item> |
| 67 | <uni-list-item title="厚度公差下限(mm)"> | 67 | <uni-list-item title="厚度公差下限(mm)"> |
| 68 | <template v-slot:footer> | 68 | <template v-slot:footer> |
| 69 | <uni-easyinput type="digit" v-model="item.thicknessTolNeg" :inputBorder="false" | 69 | <uni-easyinput type="digit" v-model="item.thicknessTolNeg" :inputBorder="false" |
| 70 | - placeholder="请输入厚度公差下限" @input="onNonNegativeInput(idx, 'thicknessTolNeg')" @blur="onNonNegativeBlur(idx, 'thicknessTolNeg', 9)" /> | 70 | + placeholder="请输入厚度公差下限" @input="onNumberInput(idx, 'thicknessTolNeg')" @blur="onNumberBlur(idx, 'thicknessTolNeg', 9)" /> |
| 71 | </template> | 71 | </template> |
| 72 | </uni-list-item> | 72 | </uni-list-item> |
| 73 | <uni-list-item title="宽度(mm)"> | 73 | <uni-list-item title="宽度(mm)"> |
| @@ -77,12 +77,12 @@ | @@ -77,12 +77,12 @@ | ||
| 77 | </uni-list-item> | 77 | </uni-list-item> |
| 78 | <uni-list-item title="宽度公差上限(mm)"> | 78 | <uni-list-item title="宽度公差上限(mm)"> |
| 79 | <template v-slot:footer> | 79 | <template v-slot:footer> |
| 80 | - <uni-easyinput type="digit" v-model="item.widthTolPos" :inputBorder="false" placeholder="请输入宽度公差上限" @input="onNonNegativeInput(idx, 'widthTolPos')" @blur="onNonNegativeBlur(idx, 'widthTolPos', 9)" /> | 80 | + <uni-easyinput type="digit" v-model="item.widthTolPos" :inputBorder="false" placeholder="请输入宽度公差上限" @input="onNumberInput(idx, 'widthTolPos')" @blur="onNumberBlur(idx, 'widthTolPos', 9)" /> |
| 81 | </template> | 81 | </template> |
| 82 | </uni-list-item> | 82 | </uni-list-item> |
| 83 | <uni-list-item title="宽度公差下限(mm)"> | 83 | <uni-list-item title="宽度公差下限(mm)"> |
| 84 | <template v-slot:footer> | 84 | <template v-slot:footer> |
| 85 | - <uni-easyinput type="digit" v-model="item.widthTolNeg" :inputBorder="false" placeholder="请输入宽度公差下限" @input="onNonNegativeInput(idx, 'widthTolNeg')" @blur="onNonNegativeBlur(idx, 'widthTolNeg', 9)" /> | 85 | + <uni-easyinput type="digit" v-model="item.widthTolNeg" :inputBorder="false" placeholder="请输入宽度公差下限" @input="onNumberInput(idx, 'widthTolNeg')" @blur="onNumberBlur(idx, 'widthTolNeg', 9)" /> |
| 86 | </template> | 86 | </template> |
| 87 | </uni-list-item> | 87 | </uni-list-item> |
| 88 | <uni-list-item title="长度(mm)"> | 88 | <uni-list-item title="长度(mm)"> |
| @@ -93,13 +93,13 @@ | @@ -93,13 +93,13 @@ | ||
| 93 | <uni-list-item title="长度公差上限(mm)"> | 93 | <uni-list-item title="长度公差上限(mm)"> |
| 94 | <template v-slot:footer> | 94 | <template v-slot:footer> |
| 95 | <uni-easyinput type="digit" v-model="item.lengthTolPos" :inputBorder="false" | 95 | <uni-easyinput type="digit" v-model="item.lengthTolPos" :inputBorder="false" |
| 96 | - placeholder="请输入长度公差上限" @input="onNonNegativeInput(idx, 'lengthTolPos')" @blur="onNonNegativeBlur(idx, 'lengthTolPos', 9)" /> | 96 | + placeholder="请输入长度公差上限" @input="onNumberInput(idx, 'lengthTolPos')" @blur="onNumberBlur(idx, 'lengthTolPos', 9)" /> |
| 97 | </template> | 97 | </template> |
| 98 | </uni-list-item> | 98 | </uni-list-item> |
| 99 | <uni-list-item title="长度公差下限(mm)"> | 99 | <uni-list-item title="长度公差下限(mm)"> |
| 100 | <template v-slot:footer> | 100 | <template v-slot:footer> |
| 101 | <uni-easyinput type="digit" v-model="item.lengthTolNeg" :inputBorder="false" | 101 | <uni-easyinput type="digit" v-model="item.lengthTolNeg" :inputBorder="false" |
| 102 | - placeholder="请输入长度公差下限" @input="onNonNegativeInput(idx, 'lengthTolNeg')" @blur="onNonNegativeBlur(idx, 'lengthTolNeg', 9)" /> | 102 | + placeholder="请输入长度公差下限" @input="onNumberInput(idx, 'lengthTolNeg')" @blur="onNumberBlur(idx, 'lengthTolNeg', 9)" /> |
| 103 | </template> | 103 | </template> |
| 104 | </uni-list-item> | 104 | </uni-list-item> |
| 105 | <uni-list-item title="状态"> | 105 | <uni-list-item title="状态"> |
| @@ -109,7 +109,7 @@ | @@ -109,7 +109,7 @@ | ||
| 109 | </uni-list-item> | 109 | </uni-list-item> |
| 110 | <uni-list-item title="数量"> | 110 | <uni-list-item title="数量"> |
| 111 | <template v-slot:footer> | 111 | <template v-slot:footer> |
| 112 | - <uni-easyinput v-model="item.quantity" type="digit" :inputBorder="false" placeholder="请输入数量kg" @input="onNonNegativeInput(idx, 'quantity')" @blur="onNonNegativeBlur(idx, 'quantity', 9)" /> | 112 | + <uni-easyinput v-model="item.quantity" type="digit" :inputBorder="false" placeholder="请输入数量kg" @input="onNonNegativeInput(idx, 'quantity')" @blur="onNonNegativeBlur(idx, 'quantity', 2)" /> |
| 113 | </template> | 113 | </template> |
| 114 | </uni-list-item> | 114 | </uni-list-item> |
| 115 | <uni-list-item title="单价"> | 115 | <uni-list-item title="单价"> |
| @@ -119,17 +119,17 @@ | @@ -119,17 +119,17 @@ | ||
| 119 | </uni-list-item> | 119 | </uni-list-item> |
| 120 | <uni-list-item title="外贸加工费"> | 120 | <uni-list-item title="外贸加工费"> |
| 121 | <template v-slot:footer> | 121 | <template v-slot:footer> |
| 122 | - <uni-easyinput v-model="item.processingFee" type="number" :inputBorder="false" placeholder="请输入外贸加工费" /> | 122 | + <uni-easyinput v-model="item.processingFee" type="digit" :inputBorder="false" placeholder="请输入外贸加工费" /> |
| 123 | </template> | 123 | </template> |
| 124 | </uni-list-item> | 124 | </uni-list-item> |
| 125 | <!-- <uni-list-item title="不含税金额"> | 125 | <!-- <uni-list-item title="不含税金额"> |
| 126 | <template v-slot:footer> | 126 | <template v-slot:footer> |
| 127 | - <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 127 | + <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="" /> |
| 128 | </template> | 128 | </template> |
| 129 | </uni-list-item> --> | 129 | </uni-list-item> --> |
| 130 | <uni-list-item title="总金额"> | 130 | <uni-list-item title="总金额"> |
| 131 | <template v-slot:footer> | 131 | <template v-slot:footer> |
| 132 | - <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 132 | + <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="" /> |
| 133 | </template> | 133 | </template> |
| 134 | </uni-list-item> | 134 | </uni-list-item> |
| 135 | <uni-list-item title="发货日期"> | 135 | <uni-list-item title="发货日期"> |
| @@ -158,27 +158,27 @@ | @@ -158,27 +158,27 @@ | ||
| 158 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> | 158 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> |
| 159 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> | 159 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> |
| 160 | <view class="row row-spec"><text class="label">规格(mm)</text> | 160 | <view class="row row-spec"><text class="label">规格(mm)</text> |
| 161 | - <view class="value value-spec"> | ||
| 162 | - <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 163 | - <view v-if="item.thickness" class="value-spec_box"> | ||
| 164 | - <view v-if="item.thicknessTolPos" class="value-spec_box_1">+{{ item.thicknessTolPos }} | ||
| 165 | - </view> | ||
| 166 | - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg }} | ||
| 167 | - </view> | ||
| 168 | - </view> | ||
| 169 | - <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 170 | - <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 171 | - <view v-if="item.width" class="value-spec_box"> | ||
| 172 | - <view v-if="item.widthTolPos" class="value-spec_box_1">+{{ item.widthTolPos }}</view> | ||
| 173 | - <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg }}</view> | ||
| 174 | - </view> | ||
| 175 | - <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 176 | - <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 177 | - <view v-if="item.length" class="value-spec_box"> | ||
| 178 | - <view v-if="item.lengthTolPos" class="value-spec_box_1">+{{ item.lengthTolPos }}</view> | ||
| 179 | - <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg }}</view> | ||
| 180 | - </view> | 161 | + <view class="value value-spec"> |
| 162 | + <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 163 | + <view v-if="item.thickness" class="value-spec_box"> | ||
| 164 | + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos ? '+' + item.thicknessTolPos : item.thicknessTolPos }} | ||
| 165 | + </view> | ||
| 166 | + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }} | ||
| 167 | + </view> | ||
| 181 | </view> | 168 | </view> |
| 169 | + <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 170 | + <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 171 | + <view v-if="item.width" class="value-spec_box"> | ||
| 172 | + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' + item.widthTolPos : item.widthTolPos }}</view> | ||
| 173 | + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' + item.widthTolNeg : item.widthTolNeg }}</view> | ||
| 174 | + </view> | ||
| 175 | + <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 176 | + <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 177 | + <view v-if="item.length" class="value-spec_box"> | ||
| 178 | + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' + item.lengthTolPos : item.lengthTolPos }}</view> | ||
| 179 | + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' + item.lengthTolNeg : item.lengthTolNeg }}</view> | ||
| 180 | + </view> | ||
| 181 | + </view> | ||
| 182 | </view> | 182 | </view> |
| 183 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> | 183 | <view class="row"><text class="label">状态</text><text class="value">{{ item.status }}</text></view> |
| 184 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> | 184 | <view class="row"><text class="label">数量</text><text class="value">{{ item.quantity }}</text></view> |
| @@ -232,12 +232,10 @@ export default { | @@ -232,12 +232,10 @@ export default { | ||
| 232 | const m = Number(parts[1]) | 232 | const m = Number(parts[1]) |
| 233 | const d = Number(parts[2]) | 233 | const d = Number(parts[2]) |
| 234 | if (!y || !m || !d) return '' | 234 | if (!y || !m || !d) return '' |
| 235 | - const dt = new Date(y, m - 1, d) | ||
| 236 | - dt.setDate(dt.getDate() + 1) | ||
| 237 | - const yy = dt.getFullYear() | ||
| 238 | - const mm = String(dt.getMonth() + 1).padStart(2, '0') | ||
| 239 | - const dd = String(dt.getDate() - 1).padStart(2, '0') | ||
| 240 | - return `${yy}/${mm}/${dd}` | 235 | + const yy = y |
| 236 | + const mm = String(m).padStart(2, '0') | ||
| 237 | + const dd = String(d).padStart(2, '0') | ||
| 238 | + return `${yy}-${mm}-${dd}` | ||
| 241 | } | 239 | } |
| 242 | }, | 240 | }, |
| 243 | watch: { | 241 | watch: { |
| @@ -341,13 +339,13 @@ export default { | @@ -341,13 +339,13 @@ export default { | ||
| 341 | } | 339 | } |
| 342 | return null | 340 | return null |
| 343 | } | 341 | } |
| 344 | - | 342 | + |
| 345 | let err = check(it.thicknessTolPos, it.thicknessTolNeg, '厚度') | 343 | let err = check(it.thicknessTolPos, it.thicknessTolNeg, '厚度') |
| 346 | if (err) { uni.showToast({ title: err, icon: 'none' }); return false } | 344 | if (err) { uni.showToast({ title: err, icon: 'none' }); return false } |
| 347 | - | 345 | + |
| 348 | err = check(it.widthTolPos, it.widthTolNeg, '宽度') | 346 | err = check(it.widthTolPos, it.widthTolNeg, '宽度') |
| 349 | if (err) { uni.showToast({ title: err, icon: 'none' }); return false } | 347 | if (err) { uni.showToast({ title: err, icon: 'none' }); return false } |
| 350 | - | 348 | + |
| 351 | err = check(it.lengthTolPos, it.lengthTolNeg, '长度') | 349 | err = check(it.lengthTolPos, it.lengthTolNeg, '长度') |
| 352 | if (err) { uni.showToast({ title: err, icon: 'none' }); return false } | 350 | if (err) { uni.showToast({ title: err, icon: 'none' }); return false } |
| 353 | } | 351 | } |
| @@ -399,7 +397,7 @@ export default { | @@ -399,7 +397,7 @@ export default { | ||
| 399 | this.emitChange() | 397 | this.emitChange() |
| 400 | }, | 398 | }, |
| 401 | recalculate(idx) { | 399 | recalculate(idx) { |
| 402 | - const TAX_RATE = 0.13 | 400 | + // const TAX_RATE = 0.13 |
| 403 | const it = this.items[idx] | 401 | const it = this.items[idx] |
| 404 | if (!it) return | 402 | if (!it) return |
| 405 | const qty = this.toNumber(it.quantity) | 403 | const qty = this.toNumber(it.quantity) |
| @@ -49,6 +49,8 @@ | @@ -49,6 +49,8 @@ | ||
| 49 | 49 | ||
| 50 | <SingleSelectSheet :visible.sync="sheet.visible" :title="sheet.title" :options="sheet.options" v-model="sheet.value" | 50 | <SingleSelectSheet :visible.sync="sheet.visible" :title="sheet.title" :options="sheet.options" v-model="sheet.value" |
| 51 | @confirm="onSheetConfirm" /> | 51 | @confirm="onSheetConfirm" /> |
| 52 | + <MultiSelectSheet :visible.sync="multiSheet.visible" :title="multiSheet.title" :options="multiSheet.options" v-model="multiSheet.value" | ||
| 53 | + @confirm="onMultiSheetConfirm" /> | ||
| 52 | 54 | ||
| 53 | <RelateSelectSheet :visible.sync="relate.visible" :title="relate.title" :source="relate.source" | 55 | <RelateSelectSheet :visible.sync="relate.visible" :title="relate.title" :source="relate.source" |
| 54 | :display-fields="relate.display" :multiple="relate.multiple" :row-key="relate.rowKey" | 56 | :display-fields="relate.display" :multiple="relate.multiple" :row-key="relate.rowKey" |
| @@ -57,12 +59,13 @@ | @@ -57,12 +59,13 @@ | ||
| 57 | </template> | 59 | </template> |
| 58 | <script> | 60 | <script> |
| 59 | import SingleSelectSheet from '@/components/single-select/index.vue' | 61 | import SingleSelectSheet from '@/components/single-select/index.vue' |
| 62 | +import MultiSelectSheet from '@/components/multi-select/index.vue' | ||
| 60 | import RelateSelectSheet from '@/components/relate-select/index.vue' | 63 | import RelateSelectSheet from '@/components/relate-select/index.vue' |
| 61 | import { productVarietyQuery, getCodeApi, createApi } from '@/api/contract' | 64 | import { productVarietyQuery, getCodeApi, createApi } from '@/api/contract' |
| 62 | import { getDicByCodes } from '@/utils/dic' | 65 | import { getDicByCodes } from '@/utils/dic' |
| 63 | 66 | ||
| 64 | export default { | 67 | export default { |
| 65 | - components: { SingleSelectSheet, RelateSelectSheet }, | 68 | + components: { SingleSelectSheet, RelateSelectSheet, MultiSelectSheet }, |
| 66 | data() { | 69 | data() { |
| 67 | return { | 70 | return { |
| 68 | form: { | 71 | form: { |
| @@ -73,13 +76,14 @@ export default { | @@ -73,13 +76,14 @@ export default { | ||
| 73 | companyName: '', | 76 | companyName: '', |
| 74 | materialTypeId: '', | 77 | materialTypeId: '', |
| 75 | materialTypeIdName: '', | 78 | materialTypeIdName: '', |
| 76 | - hasFrameworkAgreement: '', | ||
| 77 | - hasFrameworkAgreementName: '', | 79 | + hasFrameworkAgreement: true, |
| 80 | + hasFrameworkAgreementName: '是', | ||
| 78 | validityTime: '' | 81 | validityTime: '' |
| 79 | }, | 82 | }, |
| 80 | productVarietyList: [], | 83 | productVarietyList: [], |
| 81 | companyList: [], | 84 | companyList: [], |
| 82 | sheet: { visible: false, title: '请选择', field: '', options: [], value: '' }, | 85 | sheet: { visible: false, title: '请选择', field: '', options: [], value: '' }, |
| 86 | + multiSheet: { visible: false, title: '请选择', field: '', options: [], value: '' }, | ||
| 83 | relate: { visible: false, title: '选择', source: '', display: [], multiple: false, rowKey: 'id', selectedKeys: [], fieldKey: '' } | 87 | relate: { visible: false, title: '选择', source: '', display: [], multiple: false, rowKey: 'id', selectedKeys: [], fieldKey: '' } |
| 84 | } | 88 | } |
| 85 | }, | 89 | }, |
| @@ -132,14 +136,25 @@ export default { | @@ -132,14 +136,25 @@ export default { | ||
| 132 | const match = (options || []).find(o => String(o.label) === String(current) || String(o.value) === String(current)) | 136 | const match = (options || []).find(o => String(o.label) === String(current) || String(o.value) === String(current)) |
| 133 | this.sheet = { ...this.sheet, visible: true, title, options, field, value: match ? match.value : '' } | 137 | this.sheet = { ...this.sheet, visible: true, title, options, field, value: match ? match.value : '' } |
| 134 | } | 138 | } |
| 139 | + const setMultiSheet = (title, options) => { | ||
| 140 | + const current = this.form[field] | ||
| 141 | + this.multiSheet = { ...this.multiSheet, visible: true, title, options, field, value: current || '' } | ||
| 142 | + } | ||
| 143 | + | ||
| 135 | if (field === 'company') { | 144 | if (field === 'company') { |
| 136 | setSheet('所属单位', this.companyList) | 145 | setSheet('所属单位', this.companyList) |
| 137 | } else if (field === 'materialTypeId') { | 146 | } else if (field === 'materialTypeId') { |
| 138 | - setSheet('品种', this.productVarietyList) | 147 | + setMultiSheet('品种', this.productVarietyList) |
| 139 | } else if (field === 'hasFrameworkAgreement') { | 148 | } else if (field === 'hasFrameworkAgreement') { |
| 140 | setSheet('是否签订框架合同', [{ label: '是', value: true }, { label: '否', value: false }]) | 149 | setSheet('是否签订框架合同', [{ label: '是', value: true }, { label: '否', value: false }]) |
| 141 | } | 150 | } |
| 142 | }, | 151 | }, |
| 152 | + onMultiSheetConfirm({ value, label }) { | ||
| 153 | + const field = this.multiSheet.field | ||
| 154 | + if (!field) return | ||
| 155 | + this.form[field] = value || '' | ||
| 156 | + this.form[field + 'Name'] = label || '' | ||
| 157 | + }, | ||
| 143 | onSheetConfirm({ value, label }) { | 158 | onSheetConfirm({ value, label }) { |
| 144 | const field = this.sheet.field | 159 | const field = this.sheet.field |
| 145 | if (!field) return | 160 | if (!field) return |
| @@ -120,6 +120,8 @@ export default { | @@ -120,6 +120,8 @@ export default { | ||
| 120 | font-size: 28rpx; | 120 | font-size: 28rpx; |
| 121 | color: rgba(0, 0, 0, 0.9); | 121 | color: rgba(0, 0, 0, 0.9); |
| 122 | text-align: right; | 122 | text-align: right; |
| 123 | + white-space: pre-wrap; | ||
| 124 | + word-break: break-all; | ||
| 123 | } | 125 | } |
| 124 | } | 126 | } |
| 125 | </style> | 127 | </style> |
| @@ -82,10 +82,20 @@ export default { | @@ -82,10 +82,20 @@ export default { | ||
| 82 | 82 | ||
| 83 | }, | 83 | }, |
| 84 | computed: { | 84 | computed: { |
| 85 | - | 85 | + extraCombined() { |
| 86 | + return { | ||
| 87 | + keyword: this.searchKeywordDebounced || undefined | ||
| 88 | + } | ||
| 89 | + } | ||
| 86 | }, | 90 | }, |
| 87 | watch: { | 91 | watch: { |
| 88 | - | 92 | + extraCombined: { |
| 93 | + deep: true, | ||
| 94 | + handler(v) { | ||
| 95 | + this.extraParams = v | ||
| 96 | + }, | ||
| 97 | + immediate: true | ||
| 98 | + } | ||
| 89 | }, | 99 | }, |
| 90 | created() { | 100 | created() { |
| 91 | this.getProductVariety(); | 101 | this.getProductVariety(); |
| @@ -128,7 +138,7 @@ export default { | @@ -128,7 +138,7 @@ export default { | ||
| 128 | } | 138 | } |
| 129 | // 关键字(使用去抖后的值避免频繁触发) | 139 | // 关键字(使用去抖后的值避免频繁触发) |
| 130 | if (this.searchKeywordDebounced) { | 140 | if (this.searchKeywordDebounced) { |
| 131 | - params.customerName = this.searchKeywordDebounced | 141 | + params.keyword = this.searchKeywordDebounced |
| 132 | } | 142 | } |
| 133 | return queryApi(params) | 143 | return queryApi(params) |
| 134 | .then(res => { | 144 | .then(res => { |
| @@ -282,7 +292,7 @@ export default { | @@ -282,7 +292,7 @@ export default { | ||
| 282 | font-weight: 600; | 292 | font-weight: 600; |
| 283 | position: absolute; | 293 | position: absolute; |
| 284 | top: -36rpx; | 294 | top: -36rpx; |
| 285 | - right: -32rpx; | 295 | + right: -12rpx; |
| 286 | height: 48rpx; | 296 | height: 48rpx; |
| 287 | line-height: 48rpx; | 297 | line-height: 48rpx; |
| 288 | color: #fff; | 298 | color: #fff; |
| @@ -402,4 +412,4 @@ export default { | @@ -402,4 +412,4 @@ export default { | ||
| 402 | } | 412 | } |
| 403 | 413 | ||
| 404 | } | 414 | } |
| 405 | -</style> | ||
| 415 | +</style> |
| @@ -49,6 +49,8 @@ | @@ -49,6 +49,8 @@ | ||
| 49 | 49 | ||
| 50 | <SingleSelectSheet :visible.sync="sheet.visible" :title="sheet.title" :options="sheet.options" v-model="sheet.value" | 50 | <SingleSelectSheet :visible.sync="sheet.visible" :title="sheet.title" :options="sheet.options" v-model="sheet.value" |
| 51 | @confirm="onSheetConfirm" /> | 51 | @confirm="onSheetConfirm" /> |
| 52 | + <MultiSelectSheet :visible.sync="multiSheet.visible" :title="multiSheet.title" :options="multiSheet.options" v-model="multiSheet.value" | ||
| 53 | + @confirm="onMultiSheetConfirm" /> | ||
| 52 | <RelateSelectSheet :visible.sync="relate.visible" :title="relate.title" :source="relate.source" | 54 | <RelateSelectSheet :visible.sync="relate.visible" :title="relate.title" :source="relate.source" |
| 53 | :display-fields="relate.display" :multiple="relate.multiple" :row-key="relate.rowKey" | 55 | :display-fields="relate.display" :multiple="relate.multiple" :row-key="relate.rowKey" |
| 54 | :selectedKeys.sync="relate.selectedKeys" @confirm="onRelateConfirm" /> | 56 | :selectedKeys.sync="relate.selectedKeys" @confirm="onRelateConfirm" /> |
| @@ -57,12 +59,13 @@ | @@ -57,12 +59,13 @@ | ||
| 57 | 59 | ||
| 58 | <script> | 60 | <script> |
| 59 | import SingleSelectSheet from '@/components/single-select/index.vue' | 61 | import SingleSelectSheet from '@/components/single-select/index.vue' |
| 62 | +import MultiSelectSheet from '@/components/multi-select/index.vue' | ||
| 60 | import RelateSelectSheet from '@/components/relate-select/index.vue' | 63 | import RelateSelectSheet from '@/components/relate-select/index.vue' |
| 61 | import { productVarietyQuery, getCodeApi, getDetailApi, updateApi } from '@/api/contract' | 64 | import { productVarietyQuery, getCodeApi, getDetailApi, updateApi } from '@/api/contract' |
| 62 | import { getDicByCodes } from '@/utils/dic' | 65 | import { getDicByCodes } from '@/utils/dic' |
| 63 | 66 | ||
| 64 | export default { | 67 | export default { |
| 65 | - components: { SingleSelectSheet, RelateSelectSheet }, | 68 | + components: { SingleSelectSheet, RelateSelectSheet, MultiSelectSheet }, |
| 66 | data() { | 69 | data() { |
| 67 | return { | 70 | return { |
| 68 | id: '', | 71 | id: '', |
| @@ -70,6 +73,7 @@ export default { | @@ -70,6 +73,7 @@ export default { | ||
| 70 | companyList: [], | 73 | companyList: [], |
| 71 | productVarietyList: [], | 74 | productVarietyList: [], |
| 72 | sheet: { visible: false, title: '请选择', field: '', options: [], value: '' }, | 75 | sheet: { visible: false, title: '请选择', field: '', options: [], value: '' }, |
| 76 | + multiSheet: { visible: false, title: '请选择', field: '', options: [], value: '' }, | ||
| 73 | relate: { visible: false, title: '选择', source: '', display: [], multiple: false, rowKey: 'id', selectedKeys: [], fieldKey: '' } | 77 | relate: { visible: false, title: '选择', source: '', display: [], multiple: false, rowKey: 'id', selectedKeys: [], fieldKey: '' } |
| 74 | } | 78 | } |
| 75 | }, | 79 | }, |
| @@ -122,10 +126,21 @@ export default { | @@ -122,10 +126,21 @@ export default { | ||
| 122 | const match = (options || []).find(o => String(o.value) === String(current)) | 126 | const match = (options || []).find(o => String(o.value) === String(current)) |
| 123 | this.sheet = { ...this.sheet, visible: true, title, options, field, value: match ? match.value : '' } | 127 | this.sheet = { ...this.sheet, visible: true, title, options, field, value: match ? match.value : '' } |
| 124 | } | 128 | } |
| 129 | + const setMultiSheet = (title, options) => { | ||
| 130 | + const current = this.form[field] | ||
| 131 | + this.multiSheet = { ...this.multiSheet, visible: true, title, options, field, value: current || '' } | ||
| 132 | + } | ||
| 133 | + | ||
| 125 | if (field === 'company') setSheet('所属单位', this.companyList) | 134 | if (field === 'company') setSheet('所属单位', this.companyList) |
| 126 | - else if (field === 'materialTypeId') setSheet('品种', this.productVarietyList) | 135 | + else if (field === 'materialTypeId') setMultiSheet('品种', this.productVarietyList) |
| 127 | else if (field === 'hasFrameworkAgreement') setSheet('是否签订框架合同', [{ label: '是', value: true }, { label: '否', value: false }]) | 136 | else if (field === 'hasFrameworkAgreement') setSheet('是否签订框架合同', [{ label: '是', value: true }, { label: '否', value: false }]) |
| 128 | }, | 137 | }, |
| 138 | + onMultiSheetConfirm({ value, label }) { | ||
| 139 | + const field = this.multiSheet.field | ||
| 140 | + if (!field) return | ||
| 141 | + this.form[field] = value || '' | ||
| 142 | + this.form[field + 'Name'] = label || '' | ||
| 143 | + }, | ||
| 129 | onSheetConfirm({ value, label }) { | 144 | onSheetConfirm({ value, label }) { |
| 130 | const field = this.sheet.field | 145 | const field = this.sheet.field |
| 131 | if (!field) return | 146 | if (!field) return |
| @@ -61,10 +61,10 @@ | @@ -61,10 +61,10 @@ | ||
| 61 | <view class="item-title"><text class="required">*</text><text>区域</text></view> | 61 | <view class="item-title"><text class="required">*</text><text>区域</text></view> |
| 62 | </template> | 62 | </template> |
| 63 | </uni-list-item> | 63 | </uni-list-item> |
| 64 | - <ProductRel ref="productRel" mode="add" :deliveryDateBase="form.deliveryDate" :deliveryDate="form.orderDate" @change="onProductsChange" :options="productList" :rawToProdRatioList="rawToProdRatioList" /> | ||
| 65 | - <uni-list-item title="合计人民币金额(大写)"> | 64 | + <ProductRel ref="productRel" mode="add" :deliveryDateBase="form.deliveryDate" :deliveryDate="form.orderDate" @change="onProductsChange" :options="productList" :rawToProdRatioList="rawToProdRatioList" :rawProductList="rawProductList" :rawProductGradeList="rawProductGradeList" /> |
| 65 | + <uni-list-item title="合计金额(大写)"> | ||
| 66 | <template v-slot:footer> | 66 | <template v-slot:footer> |
| 67 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" disabled /> | 67 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" disabled /> |
| 68 | </template> | 68 | </template> |
| 69 | </uni-list-item> | 69 | </uni-list-item> |
| 70 | <uni-list-item title="交付定金、数额、时间"> | 70 | <uni-list-item title="交付定金、数额、时间"> |
| @@ -295,6 +295,8 @@ export default { | @@ -295,6 +295,8 @@ export default { | ||
| 295 | defaultRemark: '', | 295 | defaultRemark: '', |
| 296 | regionOptions: [], | 296 | regionOptions: [], |
| 297 | rawToProdRatioList: [], | 297 | rawToProdRatioList: [], |
| 298 | + rawProductList: [], | ||
| 299 | + rawProductGradeList: [], | ||
| 298 | } | 300 | } |
| 299 | }, | 301 | }, |
| 300 | created() { | 302 | created() { |
| @@ -441,20 +443,26 @@ export default { | @@ -441,20 +443,26 @@ export default { | ||
| 441 | }, | 443 | }, |
| 442 | async loadExtraOptions() { | 444 | async loadExtraOptions() { |
| 443 | try { | 445 | try { |
| 444 | - const results = await getDicByCodes(['CONDITIONS_REQUIRED', 'APPLICABLE_STANDARD', 'CONTRACT_PRODUCT','RAW_TO_PROD_RATIO']) | 446 | + const results = await getDicByCodes(['CONDITIONS_REQUIRED', 'APPLICABLE_STANDARD', 'CONTRACT_PRODUCT','RAW_TO_PROD_RATIO', 'RAW_MATERIAL', 'RAW_MATERIAL_GRADE']) |
| 445 | const c1 = results && results.CONDITIONS_REQUIRED && results.CONDITIONS_REQUIRED.data ? results.CONDITIONS_REQUIRED.data : [] | 447 | const c1 = results && results.CONDITIONS_REQUIRED && results.CONDITIONS_REQUIRED.data ? results.CONDITIONS_REQUIRED.data : [] |
| 446 | const c2 = results && results.APPLICABLE_STANDARD && results.APPLICABLE_STANDARD.data ? results.APPLICABLE_STANDARD.data : [] | 448 | const c2 = results && results.APPLICABLE_STANDARD && results.APPLICABLE_STANDARD.data ? results.APPLICABLE_STANDARD.data : [] |
| 447 | const c3 = results && results.CONTRACT_PRODUCT && results.CONTRACT_PRODUCT.data ? results.CONTRACT_PRODUCT.data : [] | 449 | const c3 = results && results.CONTRACT_PRODUCT && results.CONTRACT_PRODUCT.data ? results.CONTRACT_PRODUCT.data : [] |
| 448 | const c4 = results && results.RAW_TO_PROD_RATIO && results.RAW_TO_PROD_RATIO.data ? results.RAW_TO_PROD_RATIO.data : [] | 450 | const c4 = results && results.RAW_TO_PROD_RATIO && results.RAW_TO_PROD_RATIO.data ? results.RAW_TO_PROD_RATIO.data : [] |
| 451 | + const c5 = results && results.RAW_MATERIAL && results.RAW_MATERIAL.data ? results.RAW_MATERIAL.data : [] | ||
| 452 | + const c6 = results && results.RAW_MATERIAL_GRADE && results.RAW_MATERIAL_GRADE.data ? results.RAW_MATERIAL_GRADE.data : [] | ||
| 449 | this.specialTermsList = c1.map(it => ({ label: it.name, value: it.code })) | 453 | this.specialTermsList = c1.map(it => ({ label: it.name, value: it.code })) |
| 450 | this.executionStandardList = c2.map(it => ({ label: it.name, value: it.code })) | 454 | this.executionStandardList = c2.map(it => ({ label: it.name, value: it.code })) |
| 451 | this.productList = c3.map(it => ({ label: it.name, value: it.code })) | 455 | this.productList = c3.map(it => ({ label: it.name, value: it.code })) |
| 452 | this.rawToProdRatioList = c4.map(it => ({ label: it.name, value: it.code })) | 456 | this.rawToProdRatioList = c4.map(it => ({ label: it.name, value: it.code })) |
| 457 | + this.rawProductList = c5.map(it => ({ label: it.name, value: it.code })) | ||
| 458 | + this.rawProductGradeList = c6.map(it => ({ label: it.name, value: it.code })) | ||
| 453 | } catch (e) { | 459 | } catch (e) { |
| 454 | this.specialTermsList = [] | 460 | this.specialTermsList = [] |
| 455 | this.executionStandardList = [] | 461 | this.executionStandardList = [] |
| 456 | this.productList = [] | 462 | this.productList = [] |
| 457 | this.rawToProdRatioList = [] | 463 | this.rawToProdRatioList = [] |
| 464 | + this.rawProductList = [] | ||
| 465 | + this.rawProductGradeList = [] | ||
| 458 | } | 466 | } |
| 459 | }, | 467 | }, |
| 460 | displayLabel(field) { | 468 | displayLabel(field) { |
| @@ -560,7 +568,7 @@ export default { | @@ -560,7 +568,7 @@ export default { | ||
| 560 | async onSubmit() { | 568 | async onSubmit() { |
| 561 | if (!this.validateRequired()) return | 569 | if (!this.validateRequired()) return |
| 562 | const confirmRes = await new Promise(resolve => { | 570 | const confirmRes = await new Promise(resolve => { |
| 563 | - uni.showModal({ title: '提示', content: '确定新增经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 571 | + uni.showModal({ title: '提示', content: '确定新增加工标准合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 564 | }) | 572 | }) |
| 565 | if (!(confirmRes && confirmRes.confirm)) return | 573 | if (!(confirmRes && confirmRes.confirm)) return |
| 566 | const clean = (obj) => { | 574 | const clean = (obj) => { |
| @@ -587,9 +595,6 @@ export default { | @@ -587,9 +595,6 @@ export default { | ||
| 587 | totalAmountIncludingTax: this.totalAmountIncludingTax, | 595 | totalAmountIncludingTax: this.totalAmountIncludingTax, |
| 588 | contractStdProcessingLineList: lines.map(it => ({ | 596 | contractStdProcessingLineList: lines.map(it => ({ |
| 589 | ...it, | 597 | ...it, |
| 590 | - productId: it.rawProductId || '', | ||
| 591 | - productName: it.rawProductName || '', | ||
| 592 | - productGrade: it.rawProductGrade || '', | ||
| 593 | })) | 598 | })) |
| 594 | }) | 599 | }) |
| 595 | console.log('onSubmit__payload', payload) | 600 | console.log('onSubmit__payload', payload) |
| @@ -28,7 +28,7 @@ statusStyl<template> | @@ -28,7 +28,7 @@ statusStyl<template> | ||
| 28 | </view> | 28 | </view> |
| 29 | 29 | ||
| 30 | <view class="section"> | 30 | <view class="section"> |
| 31 | - <view class="row"><text class="label">合计人民币金额(大写)</text><text class="value">{{ | 31 | + <view class="row"><text class="label">合计金额(大写)</text><text class="value">{{ |
| 32 | detail.totalAmountCapital || '-' }}</text></view> | 32 | detail.totalAmountCapital || '-' }}</text></view> |
| 33 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || | 33 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || |
| 34 | '-' }}</text></view> | 34 | '-' }}</text></view> |
| @@ -60,7 +60,9 @@ statusStyl<template> | @@ -60,7 +60,9 @@ statusStyl<template> | ||
| 60 | </view> | 60 | </view> |
| 61 | 61 | ||
| 62 | <view class="section"> | 62 | <view class="section"> |
| 63 | - <view class="row"><text class="label">规范性合同</text><text class="value" style="color: #3D48A3;">{{ detail.standardFileName || '-' | 63 | + <view class="row"><text class="label">规范性合同</text><text class="value act" |
| 64 | + @click="downloadFile(detail.standardFileId, detail.standardFileName)" | ||
| 65 | + >{{ detail.standardFileName || '-' | ||
| 64 | }}</text></view> | 66 | }}</text></view> |
| 65 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ detail.standardStandardized ? '是' : '否' | 67 | <view class="row"><text class="label">合同是否规范</text><text class="value">{{ detail.standardStandardized ? '是' : '否' |
| 66 | }}</text></view> | 68 | }}</text></view> |
| @@ -117,6 +119,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | @@ -117,6 +119,7 @@ import DetailButtons from '@/components/detail-buttons/index.vue' | ||
| 117 | import FileUpload from '@/components/file-upload/index.vue' | 119 | import FileUpload from '@/components/file-upload/index.vue' |
| 118 | import SingleSelectSheet from '@/components/single-select/index.vue' | 120 | import SingleSelectSheet from '@/components/single-select/index.vue' |
| 119 | import { fillStandardApprovedName } from '@/utils/dic.js' | 121 | import { fillStandardApprovedName } from '@/utils/dic.js' |
| 122 | +import { downloadFile } from '@/utils/downloadFile.js' | ||
| 120 | 123 | ||
| 121 | export default { | 124 | export default { |
| 122 | name: 'ContractProcessDetail', | 125 | name: 'ContractProcessDetail', |
| @@ -219,8 +222,8 @@ export default { | @@ -219,8 +222,8 @@ export default { | ||
| 219 | { ...this.buttons[0], visible: (s === 'DRAFT' && this.$auth.hasPermi('contract-manage:processed-standard-contract:modify')) }, | 222 | { ...this.buttons[0], visible: (s === 'DRAFT' && this.$auth.hasPermi('contract-manage:processed-standard-contract:modify')) }, |
| 220 | { ...this.buttons[1], visible: (s === 'DRAFT' && this.$auth.hasPermi('contract-manage:processed-standard-contract:delete')) }, | 223 | { ...this.buttons[1], visible: (s === 'DRAFT' && this.$auth.hasPermi('contract-manage:processed-standard-contract:delete')) }, |
| 221 | { ...this.buttons[2], visible: (s !== 'DELETED' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:processed-standard-contract:upload')) }, | 224 | { ...this.buttons[2], visible: (s !== 'DELETED' && t !== 'AUDIT' && t !== 'PASS' && this.$auth.hasPermi('contract-manage:processed-standard-contract:upload')) }, |
| 225 | + { ...this.buttons[4], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:processed-standard-contract:review')) }, | ||
| 222 | { ...this.buttons[3], visible: (s === 'STANDARD' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:processed-standard-contract:approve')) }, | 226 | { ...this.buttons[3], visible: (s === 'STANDARD' && e && t === 'AUDIT' && this.$auth.hasPermi('contract-manage:processed-standard-contract:approve')) }, |
| 223 | - { ...this.buttons[4], visible: (s === 'STANDARD' && this.$auth.hasPermi('contract-manage:processed-standard-contract:review')) } | ||
| 224 | ] | 227 | ] |
| 225 | } | 228 | } |
| 226 | }, | 229 | }, |
| @@ -285,7 +288,7 @@ export default { | @@ -285,7 +288,7 @@ export default { | ||
| 285 | }) | 288 | }) |
| 286 | return | 289 | return |
| 287 | } | 290 | } |
| 288 | - if (!this.standardStandardized) { | 291 | + if (!this.standardStandardized && this.standardStandardized !== false) { |
| 289 | uni.showToast({ | 292 | uni.showToast({ |
| 290 | title: '请选择合同是否规范', | 293 | title: '请选择合同是否规范', |
| 291 | icon: 'error' | 294 | icon: 'error' |
| @@ -358,6 +361,7 @@ export default { | @@ -358,6 +361,7 @@ export default { | ||
| 358 | uni.setStorageSync(CACHE_KEY, id) | 361 | uni.setStorageSync(CACHE_KEY, id) |
| 359 | uni.navigateTo({ url: '/pages/flow/audit_detail' }) | 362 | uni.navigateTo({ url: '/pages/flow/audit_detail' }) |
| 360 | }, | 363 | }, |
| 364 | + downloadFile, | ||
| 361 | async loadDetail() { | 365 | async loadDetail() { |
| 362 | if (!this.id) return | 366 | if (!this.id) return |
| 363 | try { | 367 | try { |
| @@ -438,6 +442,10 @@ export default { | @@ -438,6 +442,10 @@ export default { | ||
| 438 | &_已签收 { | 442 | &_已签收 { |
| 439 | background-image: url('~@/static/images/contract/status_4.png'); | 443 | background-image: url('~@/static/images/contract/status_4.png'); |
| 440 | } | 444 | } |
| 445 | + | ||
| 446 | + &_已取消 { | ||
| 447 | + background-image: url('~@/static/images/contract/status_5.png'); | ||
| 448 | + } | ||
| 441 | } | 449 | } |
| 442 | } | 450 | } |
| 443 | .section1 { | 451 | .section1 { |
| @@ -456,9 +464,10 @@ export default { | @@ -456,9 +464,10 @@ export default { | ||
| 456 | } | 464 | } |
| 457 | 465 | ||
| 458 | .label { | 466 | .label { |
| 459 | - width: 310rpx; | 467 | + max-width: 310rpx; |
| 460 | color: rgba(0, 0, 0, 0.6); | 468 | color: rgba(0, 0, 0, 0.6); |
| 461 | font-size: 28rpx; | 469 | font-size: 28rpx; |
| 470 | + margin-right: 20rpx; | ||
| 462 | } | 471 | } |
| 463 | 472 | ||
| 464 | .value { | 473 | .value { |
| @@ -466,6 +475,11 @@ export default { | @@ -466,6 +475,11 @@ export default { | ||
| 466 | text-align: right; | 475 | text-align: right; |
| 467 | color: rgba(0, 0, 0, 0.9); | 476 | color: rgba(0, 0, 0, 0.9); |
| 468 | font-size: 28rpx; | 477 | font-size: 28rpx; |
| 478 | + white-space: pre-wrap; | ||
| 479 | + word-break: break-all; | ||
| 480 | + &.act { | ||
| 481 | + color: $theme-primary; | ||
| 482 | + } | ||
| 469 | } | 483 | } |
| 470 | 484 | ||
| 471 | .customer { | 485 | .customer { |
| @@ -516,4 +530,7 @@ export default { | @@ -516,4 +530,7 @@ export default { | ||
| 516 | color: rgba(0, 0, 0, 0.6); | 530 | color: rgba(0, 0, 0, 0.6); |
| 517 | font-size: 32rpx; | 531 | font-size: 32rpx; |
| 518 | } | 532 | } |
| 533 | +.upload-row { | ||
| 534 | + margin-top: 20rpx; | ||
| 535 | +} | ||
| 519 | </style> | 536 | </style> |
| @@ -49,7 +49,7 @@ | @@ -49,7 +49,7 @@ | ||
| 49 | <view class="card" @click="goDetail(item)"> | 49 | <view class="card" @click="goDetail(item)"> |
| 50 | <view class="card-header"> | 50 | <view class="card-header"> |
| 51 | <text class="title omit2">{{ item.buyerName }}</text> | 51 | <text class="title omit2">{{ item.buyerName }}</text> |
| 52 | - <text v-if="item.status === 'STANDARD'" :class="['status']" :style="{ background: statusMap[item.shippingStatusName] }">{{ item.shippingStatusName }}</text> | 52 | + <text v-if="item.status === 'STANDARD'" :class="['status', 'status_' + item.shippingStatusName]">{{ item.shippingStatusName }}</text> |
| 53 | </view> | 53 | </view> |
| 54 | <view class="info-row"> | 54 | <view class="info-row"> |
| 55 | <text>编号</text><text>{{ item.code }}</text> | 55 | <text>编号</text><text>{{ item.code }}</text> |
| @@ -94,8 +94,7 @@ | @@ -94,8 +94,7 @@ | ||
| 94 | <script> | 94 | <script> |
| 95 | import CardList from '@/components/card/index.vue' | 95 | import CardList from '@/components/card/index.vue' |
| 96 | import FilterModal from '@/components/filter/index.vue' | 96 | import FilterModal from '@/components/filter/index.vue' |
| 97 | -import { queryContractApi, statusStyle,statusMap } from '@/api/contract.js' | ||
| 98 | -import { officeQueryApi } from '@/api/devManage.js' | 97 | +import { queryContractApi, statusStyle } from '@/api/contract.js' |
| 99 | 98 | ||
| 100 | export default { | 99 | export default { |
| 101 | components: { CardList, FilterModal }, | 100 | components: { CardList, FilterModal }, |
| @@ -116,7 +115,6 @@ export default { | @@ -116,7 +115,6 @@ export default { | ||
| 116 | filterForm: { deptId: '', deptName: '', dateRange: [] }, | 115 | filterForm: { deptId: '', deptName: '', dateRange: [] }, |
| 117 | deptSelectVisible: false, | 116 | deptSelectVisible: false, |
| 118 | statusStyle, | 117 | statusStyle, |
| 119 | - statusMap, | ||
| 120 | } | 118 | } |
| 121 | }, | 119 | }, |
| 122 | computed: { | 120 | computed: { |
| @@ -329,26 +327,30 @@ export default { | @@ -329,26 +327,30 @@ export default { | ||
| 329 | font-size: 30rpx; | 327 | font-size: 30rpx; |
| 330 | font-weight: 600; | 328 | font-weight: 600; |
| 331 | position: absolute; | 329 | position: absolute; |
| 332 | - top: -36rpx; | ||
| 333 | - right: -32rpx; | 330 | + top: -32rpx; |
| 331 | + right: -12rpx; | ||
| 334 | height: 48rpx; | 332 | height: 48rpx; |
| 335 | - line-height: 48rpx; | 333 | + line-height: 50rpx; |
| 336 | color: #fff; | 334 | color: #fff; |
| 337 | font-size: 24rpx; | 335 | font-size: 24rpx; |
| 338 | padding: 0 14rpx; | 336 | padding: 0 14rpx; |
| 339 | border-radius: 6rpx; | 337 | border-radius: 6rpx; |
| 340 | - &.status_1 { | 338 | + &_审批中 { |
| 341 | background: $theme-primary; | 339 | background: $theme-primary; |
| 342 | } | 340 | } |
| 343 | - &.status_2 { | 341 | + &_生产中 { |
| 344 | background: #2BA471; | 342 | background: #2BA471; |
| 345 | } | 343 | } |
| 346 | - &.status_3 { | ||
| 347 | - background: #D54941; | 344 | + &_已发货 { |
| 345 | + background: #E37318; | ||
| 348 | } | 346 | } |
| 349 | - &.status_4 { | ||
| 350 | - background: #E7E7E7; | ||
| 351 | - color: rgba(0,0,0,0.9); | 347 | + &_已签收 { |
| 348 | + background: #858A99; | ||
| 349 | + color: #ffffff; | ||
| 350 | + } | ||
| 351 | + &_已取消 { | ||
| 352 | + background: #9E9E9E; | ||
| 353 | + color: #ffffff; | ||
| 352 | } | 354 | } |
| 353 | } | 355 | } |
| 354 | } | 356 | } |
| @@ -379,19 +381,19 @@ export default { | @@ -379,19 +381,19 @@ export default { | ||
| 379 | } | 381 | } |
| 380 | } | 382 | } |
| 381 | 383 | ||
| 382 | -.filter-form { | 384 | +.filter-form { |
| 383 | .form-item { margin-bottom: 24rpx; } | 385 | .form-item { margin-bottom: 24rpx; } |
| 384 | - .label { | ||
| 385 | - margin-bottom: 20rpx; | 386 | + .label { |
| 387 | + margin-bottom: 20rpx; | ||
| 386 | color: rgba(0,0,0,0.9); | 388 | color: rgba(0,0,0,0.9); |
| 387 | height: 44rpx; | 389 | height: 44rpx; |
| 388 | line-height: 44rpx; | 390 | line-height: 44rpx; |
| 389 | font-size: 30rpx; | 391 | font-size: 30rpx; |
| 390 | } | 392 | } |
| 391 | - .fake-select { | ||
| 392 | - height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | 393 | + .fake-select { |
| 394 | + height: 80rpx; line-height: 80rpx; padding: 0 20rpx; background: #f3f3f3; border-radius: 12rpx; | ||
| 393 | .placeholder { color: #999; } | 395 | .placeholder { color: #999; } |
| 394 | .value { color: #333; } | 396 | .value { color: #333; } |
| 395 | } | 397 | } |
| 396 | } | 398 | } |
| 397 | -</style> | ||
| 399 | +</style> |
| @@ -41,11 +41,11 @@ | @@ -41,11 +41,11 @@ | ||
| 41 | </template> | 41 | </template> |
| 42 | </uni-list-item> | 42 | </uni-list-item> |
| 43 | 43 | ||
| 44 | - <ProductRel mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" :list="productLineList" @change="onProductsChange" :options="productList" /> | 44 | + <ProductRel mode="add" :deliveryDate="form.orderDate" :deliveryDateBase="form.deliveryDate" :rawToProdRatioList="rawToProdRatioList" :list="productLineList" @change="onProductsChange" :options="productList" :rawProductList="rawProductList" :rawProductGradeList="rawProductGradeList" /> |
| 45 | 45 | ||
| 46 | - <uni-list-item title="合计人民币金额(大写)"> | 46 | + <uni-list-item title="合计金额(大写)"> |
| 47 | <template v-slot:footer> | 47 | <template v-slot:footer> |
| 48 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" | 48 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" |
| 49 | disabled /> | 49 | disabled /> |
| 50 | </template> | 50 | </template> |
| 51 | </uni-list-item> | 51 | </uni-list-item> |
| @@ -266,6 +266,8 @@ export default { | @@ -266,6 +266,8 @@ export default { | ||
| 266 | productList: [], | 266 | productList: [], |
| 267 | regionOptions: [], | 267 | regionOptions: [], |
| 268 | rawToProdRatioList: [], | 268 | rawToProdRatioList: [], |
| 269 | + rawProductList: [], | ||
| 270 | + rawProductGradeList: [], | ||
| 269 | } | 271 | } |
| 270 | }, | 272 | }, |
| 271 | onLoad(query) { | 273 | onLoad(query) { |
| @@ -383,20 +385,27 @@ export default { | @@ -383,20 +385,27 @@ export default { | ||
| 383 | }, | 385 | }, |
| 384 | async loadExtraOptions() { | 386 | async loadExtraOptions() { |
| 385 | try { | 387 | try { |
| 386 | - const results = await getDicByCodes(['CONDITIONS_REQUIRED', 'APPLICABLE_STANDARD', 'CONTRACT_PRODUCT','RAW_TO_PROD_RATIO']) | 388 | + const results = await getDicByCodes(['CONDITIONS_REQUIRED', 'APPLICABLE_STANDARD', 'CONTRACT_PRODUCT','RAW_TO_PROD_RATIO', 'RAW_MATERIAL', 'RAW_MATERIAL_GRADE']) |
| 387 | const c1 = results && results.CONDITIONS_REQUIRED && results.CONDITIONS_REQUIRED.data ? results.CONDITIONS_REQUIRED.data : [] | 389 | const c1 = results && results.CONDITIONS_REQUIRED && results.CONDITIONS_REQUIRED.data ? results.CONDITIONS_REQUIRED.data : [] |
| 388 | const c2 = results && results.APPLICABLE_STANDARD && results.APPLICABLE_STANDARD.data ? results.APPLICABLE_STANDARD.data : [] | 390 | const c2 = results && results.APPLICABLE_STANDARD && results.APPLICABLE_STANDARD.data ? results.APPLICABLE_STANDARD.data : [] |
| 389 | const c3 = results && results.CONTRACT_PRODUCT && results.CONTRACT_PRODUCT.data ? results.CONTRACT_PRODUCT.data : [] | 391 | const c3 = results && results.CONTRACT_PRODUCT && results.CONTRACT_PRODUCT.data ? results.CONTRACT_PRODUCT.data : [] |
| 390 | const c4 = results && results.RAW_TO_PROD_RATIO && results.RAW_TO_PROD_RATIO.data ? results.RAW_TO_PROD_RATIO.data : [] | 392 | const c4 = results && results.RAW_TO_PROD_RATIO && results.RAW_TO_PROD_RATIO.data ? results.RAW_TO_PROD_RATIO.data : [] |
| 393 | + const c5 = results && results.RAW_MATERIAL && results.RAW_MATERIAL.data ? results.RAW_MATERIAL.data : [] | ||
| 394 | + const c6 = results && results.RAW_MATERIAL_GRADE && results.RAW_MATERIAL_GRADE.data ? results.RAW_MATERIAL_GRADE.data : [] | ||
| 391 | this.rawToProdRatioList = c4.map(it => ({ label: it.name, value: it.code })) | 395 | this.rawToProdRatioList = c4.map(it => ({ label: it.name, value: it.code })) |
| 392 | this.specialTermsList = c1.map(it => ({ label: it.name, value: it.code })) | 396 | this.specialTermsList = c1.map(it => ({ label: it.name, value: it.code })) |
| 393 | this.executionStandardList = c2.map(it => ({ label: it.name, value: it.code })) | 397 | this.executionStandardList = c2.map(it => ({ label: it.name, value: it.code })) |
| 394 | this.productList = c3.map(it => ({ label: it.name, value: it.code })) | 398 | this.productList = c3.map(it => ({ label: it.name, value: it.code })) |
| 399 | + console.log('c5', c5) | ||
| 400 | + this.rawProductList = c5.map(it => ({ label: it.name, value: it.code })) | ||
| 401 | + this.rawProductGradeList = c6.map(it => ({ label: it.name, value: it.code })) | ||
| 395 | } catch (e) { | 402 | } catch (e) { |
| 396 | this.specialTermsList = [] | 403 | this.specialTermsList = [] |
| 397 | this.executionStandardList = [] | 404 | this.executionStandardList = [] |
| 398 | this.productList = [] | 405 | this.productList = [] |
| 399 | this.rawToProdRatioList = [] | 406 | this.rawToProdRatioList = [] |
| 407 | + this.rawProductList = [] | ||
| 408 | + this.rawProductGradeList = [] | ||
| 400 | } | 409 | } |
| 401 | }, | 410 | }, |
| 402 | displayLabel(field) { | 411 | displayLabel(field) { |
| @@ -486,12 +495,12 @@ export default { | @@ -486,12 +495,12 @@ export default { | ||
| 486 | } | 495 | } |
| 487 | const strEmpty = (v) => (v === undefined || v === null || (typeof v === 'string' && v.trim() === '')) | 496 | const strEmpty = (v) => (v === undefined || v === null || (typeof v === 'string' && v.trim() === '')) |
| 488 | const numEmpty = (v) => (v === undefined || v === null || v === '' || (typeof v === 'number' && isNaN(v))) | 497 | const numEmpty = (v) => (v === undefined || v === null || v === '' || (typeof v === 'number' && isNaN(v))) |
| 498 | + console.log('list11', list) | ||
| 489 | for (const [idx, it] of list.entries()) { | 499 | for (const [idx, it] of list.entries()) { |
| 490 | if ( | 500 | if ( |
| 491 | strEmpty(it.productName) || | 501 | strEmpty(it.productName) || |
| 492 | strEmpty(it.industry) || | 502 | strEmpty(it.industry) || |
| 493 | strEmpty(it.quality) || | 503 | strEmpty(it.quality) || |
| 494 | - strEmpty(it.brand) || | ||
| 495 | numEmpty(it.productQuantity) || | 504 | numEmpty(it.productQuantity) || |
| 496 | strEmpty(it.unitPrice) || | 505 | strEmpty(it.unitPrice) || |
| 497 | strEmpty(it.deliveryDate) | 506 | strEmpty(it.deliveryDate) |
| @@ -505,7 +514,7 @@ export default { | @@ -505,7 +514,7 @@ export default { | ||
| 505 | console.log('onSubmit__payload', payload) | 514 | console.log('onSubmit__payload', payload) |
| 506 | if (!this.validateRequired()) return | 515 | if (!this.validateRequired()) return |
| 507 | const confirmRes = await new Promise(resolve => { | 516 | const confirmRes = await new Promise(resolve => { |
| 508 | - uni.showModal({ title: '提示', content: '确定保存当前经销未锁规合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) | 517 | + uni.showModal({ title: '提示', content: '确定保存当前加工标准合同吗?', confirmText: '确定', cancelText: '取消', success: resolve }) |
| 509 | }) | 518 | }) |
| 510 | if (!(confirmRes && confirmRes.confirm)) return | 519 | if (!(confirmRes && confirmRes.confirm)) return |
| 511 | const clean = (obj) => { | 520 | const clean = (obj) => { |
| @@ -19,7 +19,7 @@ | @@ -19,7 +19,7 @@ | ||
| 19 | </view> | 19 | </view> |
| 20 | 20 | ||
| 21 | <view class="section"> | 21 | <view class="section"> |
| 22 | - <view class="row"><text class="label">合计人民币金额(大写)</text><text class="value">{{ | 22 | + <view class="row"><text class="label">合计金额(大写)</text><text class="value">{{ |
| 23 | detail.totalAmountCapital || '-' }}</text></view> | 23 | detail.totalAmountCapital || '-' }}</text></view> |
| 24 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || | 24 | <view class="row"><text class="label">交付定金、数额、时间</text><text class="value">{{ detail.depositInfo || |
| 25 | '-' }}</text></view> | 25 | '-' }}</text></view> |
| @@ -21,9 +21,9 @@ | @@ -21,9 +21,9 @@ | ||
| 21 | <view class="item-title"><text>原材料名称</text></view> | 21 | <view class="item-title"><text>原材料名称</text></view> |
| 22 | </template> | 22 | </template> |
| 23 | </uni-list-item> | 23 | </uni-list-item> |
| 24 | - <uni-list-item title="原材料牌号"> | ||
| 25 | - <template v-slot:footer> | ||
| 26 | - <uni-easyinput v-model="item.rawProductGrade" :inputBorder="false" placeholder="请输入原材料牌号" /> | 24 | + <uni-list-item class="select-item" :class="item.rawProductGradeName ? 'is-filled' : 'is-empty'" clickable @click="openProductGradeSheet(idx)" :rightText="item.rawProductGradeName || '请选择原材料牌号'" showArrow> |
| 25 | + <template v-slot:body> | ||
| 26 | + <view class="item-title"><text>原材料牌号</text></view> | ||
| 27 | </template> | 27 | </template> |
| 28 | </uni-list-item> | 28 | </uni-list-item> |
| 29 | <uni-list-item title="行业"> | 29 | <uni-list-item title="行业"> |
| @@ -38,9 +38,9 @@ | @@ -38,9 +38,9 @@ | ||
| 38 | <view class="item-title"><text>原材料名称</text></view> | 38 | <view class="item-title"><text>原材料名称</text></view> |
| 39 | </template> | 39 | </template> |
| 40 | </uni-list-item> | 40 | </uni-list-item> |
| 41 | - <uni-list-item title="原材料牌号"> | ||
| 42 | - <template v-slot:footer> | ||
| 43 | - <uni-easyinput v-model="item.rawProductGrade" :inputBorder="false" placeholder="请输入原材料牌号" /> | 41 | + <uni-list-item class="select-item" :class="item.rawProductGradeName ? 'is-filled' : 'is-empty'" clickable @click="openProductGradeSheet(idx)" :rightText="item.rawProductGradeName || '请选择原材料牌号'" showArrow> |
| 42 | + <template v-slot:body> | ||
| 43 | + <view class="item-title"><text>原材料牌号</text></view> | ||
| 44 | </template> | 44 | </template> |
| 45 | </uni-list-item> | 45 | </uni-list-item> |
| 46 | <uni-list-item title="行业"> | 46 | <uni-list-item title="行业"> |
| @@ -58,14 +58,14 @@ | @@ -58,14 +58,14 @@ | ||
| 58 | <uni-easyinput v-model="item.supplyTime" :inputBorder="false" placeholder="请输入原材料提供时间" /> | 58 | <uni-easyinput v-model="item.supplyTime" :inputBorder="false" placeholder="请输入原材料提供时间" /> |
| 59 | </template> | 59 | </template> |
| 60 | </uni-list-item> | 60 | </uni-list-item> |
| 61 | - <uni-list-item class="select-item" :class="item.rawToProdRatioName ? 'is-filled' : 'is-empty'" clickable @click="openRawToProdRatioSheet(idx)" :rightText="item.rawToProdRatioName || '请选择原材料与产品数量比'" showArrow> | 61 | + <uni-list-item class="select-item" :class="item.materialProductRatioName ? 'is-filled' : 'is-empty'" clickable @click="openRawToProdRatioSheet(idx)" :rightText="item.materialProductRatioName || '请选择原材料与产品数量比'" showArrow> |
| 62 | <template v-slot:body> | 62 | <template v-slot:body> |
| 63 | <view class="item-title"><text>原材料与产品数量比</text></view> | 63 | <view class="item-title"><text>原材料与产品数量比</text></view> |
| 64 | </template> | 64 | </template> |
| 65 | </uni-list-item> | 65 | </uni-list-item> |
| 66 | - <uni-list-item title="原材料与产品数量比备注"> | 66 | + <uni-list-item title="原材料与产品数量比备注" v-if="item.materialProductRatio === '10'"> |
| 67 | <template v-slot:footer> | 67 | <template v-slot:footer> |
| 68 | - <uni-easyinput v-model="item.materialProductRatioRemarks" :disabled="item.materialProductRatio !== '10'" :inputBorder="false" placeholder="请输入原材料与产品数量比备注" /> | 68 | + <uni-easyinput v-model="item.materialProductRatioRemarks" :inputBorder="false" placeholder="请输入原材料与产品数量比备注" /> |
| 69 | </template> | 69 | </template> |
| 70 | </uni-list-item> | 70 | </uni-list-item> |
| 71 | 71 | ||
| @@ -92,13 +92,13 @@ | @@ -92,13 +92,13 @@ | ||
| 92 | </uni-list-item> | 92 | </uni-list-item> |
| 93 | <uni-list-item title="厚度公差上限(mm)"> | 93 | <uni-list-item title="厚度公差上限(mm)"> |
| 94 | <template v-slot:footer> | 94 | <template v-slot:footer> |
| 95 | - <uni-easyinput type="text" v-model="item.thicknessTolPos" :inputBorder="false" | 95 | + <uni-easyinput type="digit" v-model="item.thicknessTolPos" :inputBorder="false" |
| 96 | placeholder="请输入厚度公差上限" @input="onNumberInput(idx, 'thicknessTolPos')" @blur="onNumberBlur(idx, 'thicknessTolPos', 9)" /> | 96 | placeholder="请输入厚度公差上限" @input="onNumberInput(idx, 'thicknessTolPos')" @blur="onNumberBlur(idx, 'thicknessTolPos', 9)" /> |
| 97 | </template> | 97 | </template> |
| 98 | </uni-list-item> | 98 | </uni-list-item> |
| 99 | <uni-list-item title="厚度公差下限(mm)"> | 99 | <uni-list-item title="厚度公差下限(mm)"> |
| 100 | <template v-slot:footer> | 100 | <template v-slot:footer> |
| 101 | - <uni-easyinput type="text" v-model="item.thicknessTolNeg" :inputBorder="false" | 101 | + <uni-easyinput type="digit" v-model="item.thicknessTolNeg" :inputBorder="false" |
| 102 | placeholder="请输入厚度公差下限" @input="onNumberInput(idx, 'thicknessTolNeg')" @blur="onNumberBlur(idx, 'thicknessTolNeg', 9)" /> | 102 | placeholder="请输入厚度公差下限" @input="onNumberInput(idx, 'thicknessTolNeg')" @blur="onNumberBlur(idx, 'thicknessTolNeg', 9)" /> |
| 103 | </template> | 103 | </template> |
| 104 | </uni-list-item> | 104 | </uni-list-item> |
| @@ -109,12 +109,12 @@ | @@ -109,12 +109,12 @@ | ||
| 109 | </uni-list-item> | 109 | </uni-list-item> |
| 110 | <uni-list-item title="宽度公差上限(mm)"> | 110 | <uni-list-item title="宽度公差上限(mm)"> |
| 111 | <template v-slot:footer> | 111 | <template v-slot:footer> |
| 112 | - <uni-easyinput type="text" v-model="item.widthTolPos" :inputBorder="false" placeholder="请输入宽度公差上限" @input="onNumberInput(idx, 'widthTolPos')" @blur="onNumberBlur(idx, 'widthTolPos', 9)" /> | 112 | + <uni-easyinput type="digit" v-model="item.widthTolPos" :inputBorder="false" placeholder="请输入宽度公差上限" @input="onNumberInput(idx, 'widthTolPos')" @blur="onNumberBlur(idx, 'widthTolPos', 9)" /> |
| 113 | </template> | 113 | </template> |
| 114 | </uni-list-item> | 114 | </uni-list-item> |
| 115 | <uni-list-item title="宽度公差下限(mm)"> | 115 | <uni-list-item title="宽度公差下限(mm)"> |
| 116 | <template v-slot:footer> | 116 | <template v-slot:footer> |
| 117 | - <uni-easyinput type="text" v-model="item.widthTolNeg" :inputBorder="false" placeholder="请输入宽度公差下限" @input="onNumberInput(idx, 'widthTolNeg')" @blur="onNumberBlur(idx, 'widthTolNeg', 9)" /> | 117 | + <uni-easyinput type="digit" v-model="item.widthTolNeg" :inputBorder="false" placeholder="请输入宽度公差下限" @input="onNumberInput(idx, 'widthTolNeg')" @blur="onNumberBlur(idx, 'widthTolNeg', 9)" /> |
| 118 | </template> | 118 | </template> |
| 119 | </uni-list-item> | 119 | </uni-list-item> |
| 120 | <uni-list-item title="长度(mm)"> | 120 | <uni-list-item title="长度(mm)"> |
| @@ -124,19 +124,19 @@ | @@ -124,19 +124,19 @@ | ||
| 124 | </uni-list-item> | 124 | </uni-list-item> |
| 125 | <uni-list-item title="长度公差上限(mm)"> | 125 | <uni-list-item title="长度公差上限(mm)"> |
| 126 | <template v-slot:footer> | 126 | <template v-slot:footer> |
| 127 | - <uni-easyinput type="text" v-model="item.lengthTolPos" :inputBorder="false" | 127 | + <uni-easyinput type="digit" v-model="item.lengthTolPos" :inputBorder="false" |
| 128 | placeholder="请输入长度公差上限" @input="onNumberInput(idx, 'lengthTolPos')" @blur="onNumberBlur(idx, 'lengthTolPos', 9)" /> | 128 | placeholder="请输入长度公差上限" @input="onNumberInput(idx, 'lengthTolPos')" @blur="onNumberBlur(idx, 'lengthTolPos', 9)" /> |
| 129 | </template> | 129 | </template> |
| 130 | </uni-list-item> | 130 | </uni-list-item> |
| 131 | <uni-list-item title="长度公差下限(mm)"> | 131 | <uni-list-item title="长度公差下限(mm)"> |
| 132 | <template v-slot:footer> | 132 | <template v-slot:footer> |
| 133 | - <uni-easyinput type="text" v-model="item.lengthTolNeg" :inputBorder="false" | 133 | + <uni-easyinput type="digit" v-model="item.lengthTolNeg" :inputBorder="false" |
| 134 | placeholder="请输入长度公差下限" @input="onNumberInput(idx, 'lengthTolNeg')" @blur="onNumberBlur(idx, 'lengthTolNeg', 9)" /> | 134 | placeholder="请输入长度公差下限" @input="onNumberInput(idx, 'lengthTolNeg')" @blur="onNumberBlur(idx, 'lengthTolNeg', 9)" /> |
| 135 | </template> | 135 | </template> |
| 136 | </uni-list-item> | 136 | </uni-list-item> |
| 137 | <uni-list-item title="定作物数量"> | 137 | <uni-list-item title="定作物数量"> |
| 138 | <template v-slot:footer> | 138 | <template v-slot:footer> |
| 139 | - <uni-easyinput v-model="item.productQuantity" type="digit" :inputBorder="false" placeholder="请输入数量kg" @input="onNonNegativeInput(idx, 'productQuantity')" @blur="onNonNegativeBlur(idx, 'productQuantity', 9)" /> | 139 | + <uni-easyinput v-model="item.productQuantity" type="digit" :inputBorder="false" placeholder="请输入数量kg" @input="onNonNegativeInput(idx, 'productQuantity')" @blur="onNonNegativeBlur(idx, 'productQuantity', 2)" /> |
| 140 | </template> | 140 | </template> |
| 141 | </uni-list-item> | 141 | </uni-list-item> |
| 142 | <uni-list-item title="加工费单价"> | 142 | <uni-list-item title="加工费单价"> |
| @@ -146,12 +146,12 @@ | @@ -146,12 +146,12 @@ | ||
| 146 | </uni-list-item> | 146 | </uni-list-item> |
| 147 | <uni-list-item title="不含税金额"> | 147 | <uni-list-item title="不含税金额"> |
| 148 | <template v-slot:footer> | 148 | <template v-slot:footer> |
| 149 | - <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 149 | + <uni-easyinput v-model="item.amountExcludingTax" type="number" :inputBorder="false" disabled placeholder="" /> |
| 150 | </template> | 150 | </template> |
| 151 | </uni-list-item> | 151 | </uni-list-item> |
| 152 | <uni-list-item title="总金额"> | 152 | <uni-list-item title="总金额"> |
| 153 | <template v-slot:footer> | 153 | <template v-slot:footer> |
| 154 | - <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="自动计算" /> | 154 | + <uni-easyinput v-model="item.totalAmount" type="number" :inputBorder="false" disabled placeholder="" /> |
| 155 | </template> | 155 | </template> |
| 156 | </uni-list-item> | 156 | </uni-list-item> |
| 157 | <uni-list-item title="发货日期"> | 157 | <uni-list-item title="发货日期"> |
| @@ -175,35 +175,39 @@ | @@ -175,35 +175,39 @@ | ||
| 175 | <view v-else class="view-list" v-show="!collapsedView"> | 175 | <view v-else class="view-list" v-show="!collapsedView"> |
| 176 | <view v-for="(item, idx) in items" :key="'v-' + idx" class="card"> | 176 | <view v-for="(item, idx) in items" :key="'v-' + idx" class="card"> |
| 177 | <view class="row"><text class="label">原材料名称</text><text class="value">{{ item.rawProductName }}</text></view> | 177 | <view class="row"><text class="label">原材料名称</text><text class="value">{{ item.rawProductName }}</text></view> |
| 178 | - <view class="row"><text class="label">原材料牌号</text><text class="value">{{ item.rawProductGrade }}</text></view> | ||
| 179 | - <view class="row"><text class="label">原材料提供时间</text><text class="value">{{ item.rawProductProvideDate }}</text></view> | ||
| 180 | - <view class="row"><text class="label">原材料产品数量比</text><text class="value">{{ item.rawToProdRatioName }}</text></view> | 178 | + <view class="row"><text class="label">原材料牌号</text><text class="value">{{ item.rawProductGradeName }}</text></view> |
| 179 | + <view class="row"><text class="label">原材料提供时间</text><text class="value">{{ item.supplyTime }}</text></view> | ||
| 180 | + <view class="row"><text class="label">原材料产品数量比</text><text class="value">{{ item.materialProductRatioName }}</text></view> | ||
| 181 | <view class="row"><text class="label">行业</text><text class="value">{{ item.industry }}</text></view> | 181 | <view class="row"><text class="label">行业</text><text class="value">{{ item.industry }}</text></view> |
| 182 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> | 182 | <view class="row"><text class="label">品质</text><text class="value">{{ item.quality }}</text></view> |
| 183 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> | 183 | <!-- 厚(公差) * 宽(公差) * 长(公差) --> |
| 184 | - <view class="row row-spec"><text class="label">规格(mm)</text> | ||
| 185 | - <view class="value value-spec"> | ||
| 186 | - <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 187 | - <view v-if="item.thickness" class="value-spec_box"> | ||
| 188 | - <view v-if="item.thicknessTolPos" class="value-spec_box_1">+{{ item.thicknessTolPos }} | ||
| 189 | - </view> | ||
| 190 | - <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg }} | ||
| 191 | - </view> | 184 | + <view class="row row-spec"><text class="label">规格(mm)</text> |
| 185 | + <view class="value value-spec"> | ||
| 186 | + <view v-if="item.thickness" class="value-spec_val">{{ item.thickness }}</view> | ||
| 187 | + <view v-if="item.thickness" class="value-spec_box"> | ||
| 188 | + <view v-if="item.thicknessTolPos" class="value-spec_box_1">{{ item.thicknessTolPos > 0 ? '+' + item.thicknessTolPos : item.thicknessTolPos }} | ||
| 189 | + </view> | ||
| 190 | + <view v-if="item.thicknessTolNeg" class="value-spec_box_2">{{ item.thicknessTolNeg > 0 ? '+' + item.thicknessTolNeg : item.thicknessTolNeg }} | ||
| 192 | </view> | 191 | </view> |
| 193 | - <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 194 | - <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 195 | - <view v-if="item.width" class="value-spec_box"> | ||
| 196 | - <view v-if="item.widthTolPos" class="value-spec_box_1">+{{ item.widthTolPos }}</view> | ||
| 197 | - <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg }}</view> | 192 | + </view> |
| 193 | + <view v-if="item.width" class="value-spec_val p12">*</view> | ||
| 194 | + <view v-if="item.width" class="value-spec_val">{{ item.width }}</view> | ||
| 195 | + <view v-if="item.width" class="value-spec_box"> | ||
| 196 | + <view v-if="item.widthTolPos" class="value-spec_box_1">{{ item.widthTolPos > 0 ? '+' + item.widthTolPos : item.widthTolPos }} | ||
| 198 | </view> | 197 | </view> |
| 199 | - <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 200 | - <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 201 | - <view v-if="item.length" class="value-spec_box"> | ||
| 202 | - <view v-if="item.lengthTolPos" class="value-spec_box_1">+{{ item.lengthTolPos }}</view> | ||
| 203 | - <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg }}</view> | 198 | + <view v-if="item.widthTolNeg" class="value-spec_box_2">{{ item.widthTolNeg > 0 ? '+' + item.widthTolNeg : item.widthTolNeg }} |
| 199 | + </view> | ||
| 200 | + </view> | ||
| 201 | + <view v-if="item.length" class="value-spec_val p12">*</view> | ||
| 202 | + <view v-if="item.length" class="value-spec_val">{{ item.length }}</view> | ||
| 203 | + <view v-if="item.length" class="value-spec_box"> | ||
| 204 | + <view v-if="item.lengthTolPos" class="value-spec_box_1">{{ item.lengthTolPos > 0 ? '+' + item.lengthTolPos : item.lengthTolPos }} | ||
| 205 | + </view> | ||
| 206 | + <view v-if="item.lengthTolNeg" class="value-spec_box_2">{{ item.lengthTolNeg > 0 ? '+' + item.lengthTolNeg : item.lengthTolNeg }} | ||
| 204 | </view> | 207 | </view> |
| 205 | </view> | 208 | </view> |
| 206 | </view> | 209 | </view> |
| 210 | + </view> | ||
| 207 | <view class="row"><text class="label">定做物数量</text><text class="value">{{ item.productQuantity }}</text></view> | 211 | <view class="row"><text class="label">定做物数量</text><text class="value">{{ item.productQuantity }}</text></view> |
| 208 | <view class="row"><text class="label">加工费单价</text><text class="value">{{ formatCurrency(item.unitPrice) | 212 | <view class="row"><text class="label">加工费单价</text><text class="value">{{ formatCurrency(item.unitPrice) |
| 209 | }}</text> | 213 | }}</text> |
| @@ -230,7 +234,9 @@ export default { | @@ -230,7 +234,9 @@ export default { | ||
| 230 | deliveryDateBase: { type: String, default: '' }, | 234 | deliveryDateBase: { type: String, default: '' }, |
| 231 | options: { type: Array, default: () => [] }, | 235 | options: { type: Array, default: () => [] }, |
| 232 | deliveryDate: { type: String, default: '' }, | 236 | deliveryDate: { type: String, default: '' }, |
| 233 | - rawToProdRatioList: { type: Array, default: () => [] } | 237 | + rawToProdRatioList: { type: Array, default: () => [] }, |
| 238 | + rawProductList: { type: Array, default: () => [] }, | ||
| 239 | + rawProductGradeList: { type: Array, default: () => [] }, | ||
| 234 | }, | 240 | }, |
| 235 | components: { SingleSelectSheet }, | 241 | components: { SingleSelectSheet }, |
| 236 | data() { | 242 | data() { |
| @@ -250,11 +256,18 @@ export default { | @@ -250,11 +256,18 @@ export default { | ||
| 250 | }, | 256 | }, |
| 251 | ratioOptions() { | 257 | ratioOptions() { |
| 252 | const list = Array.isArray(this.rawToProdRatioList) ? this.rawToProdRatioList : [] | 258 | const list = Array.isArray(this.rawToProdRatioList) ? this.rawToProdRatioList : [] |
| 259 | + console.log('list', list) | ||
| 253 | return list.map(o => ({ | 260 | return list.map(o => ({ |
| 254 | label: o.label != null ? o.label : (o.text != null ? o.text : (o.name != null ? o.name : '')), | 261 | label: o.label != null ? o.label : (o.text != null ? o.text : (o.name != null ? o.name : '')), |
| 255 | value: o.value != null ? o.value : (o.id != null ? o.id : o.code) | 262 | value: o.value != null ? o.value : (o.id != null ? o.id : o.code) |
| 256 | })) | 263 | })) |
| 257 | }, | 264 | }, |
| 265 | + rawProductOptions() { | ||
| 266 | + return Array.isArray(this.rawProductList) ? this.rawProductList : [] | ||
| 267 | + }, | ||
| 268 | + rawProductGradeOptions() { | ||
| 269 | + return Array.isArray(this.rawProductGradeList) ? this.rawProductGradeList : [] | ||
| 270 | + }, | ||
| 258 | minDeliveryDate() { | 271 | minDeliveryDate() { |
| 259 | const s = this.deliveryDate | 272 | const s = this.deliveryDate |
| 260 | if (!s) return '' | 273 | if (!s) return '' |
| @@ -263,12 +276,10 @@ export default { | @@ -263,12 +276,10 @@ export default { | ||
| 263 | const m = Number(parts[1]) | 276 | const m = Number(parts[1]) |
| 264 | const d = Number(parts[2]) | 277 | const d = Number(parts[2]) |
| 265 | if (!y || !m || !d) return '' | 278 | if (!y || !m || !d) return '' |
| 266 | - const dt = new Date(y, m - 1, d) | ||
| 267 | - dt.setDate(dt.getDate() + 1) | ||
| 268 | - const yy = dt.getFullYear() | ||
| 269 | - const mm = String(dt.getMonth() + 1).padStart(2, '0') | ||
| 270 | - const dd = String(dt.getDate() - 1).padStart(2, '0') | ||
| 271 | - return `${yy}/${mm}/${dd}` | 279 | + const yy = y |
| 280 | + const mm = String(m).padStart(2, '0') | ||
| 281 | + const dd = String(d).padStart(2, '0') | ||
| 282 | + return `${yy}-${mm}-${dd}` | ||
| 272 | } | 283 | } |
| 273 | }, | 284 | }, |
| 274 | watch: { | 285 | watch: { |
| @@ -278,8 +289,6 @@ export default { | @@ -278,8 +289,6 @@ export default { | ||
| 278 | }, | 289 | }, |
| 279 | list: { | 290 | list: { |
| 280 | handler(v) { | 291 | handler(v) { |
| 281 | - // const arr = Array.isArray(v) ? v : [] | ||
| 282 | - // this.items = arr.map(x => ({ ...this.defaultItem(), ...x, collapsed: true })) | ||
| 283 | this.items = v.map(x => ({ ...this.defaultItem(), ...x, collapsed: true })) | 292 | this.items = v.map(x => ({ ...this.defaultItem(), ...x, collapsed: true })) |
| 284 | console.log('v', v) | 293 | console.log('v', v) |
| 285 | }, | 294 | }, |
| @@ -289,11 +298,12 @@ export default { | @@ -289,11 +298,12 @@ export default { | ||
| 289 | created() { | 298 | created() { |
| 290 | const init = Array.isArray(this.list) && this.list.length > 0 ? this.list.map(v => ({ ...this.defaultItem(), ...v, collapsed: true })) : [{ ...this.defaultItem(), collapsed: false }] | 299 | const init = Array.isArray(this.list) && this.list.length > 0 ? this.list.map(v => ({ ...this.defaultItem(), ...v, collapsed: true })) : [{ ...this.defaultItem(), collapsed: false }] |
| 291 | this.items = init | 300 | this.items = init |
| 301 | + console.log('init', init) | ||
| 292 | this.recalculateAll() | 302 | this.recalculateAll() |
| 293 | }, | 303 | }, |
| 294 | methods: { | 304 | methods: { |
| 295 | defaultItem() { | 305 | defaultItem() { |
| 296 | - return { productId:'', productName:'', productGrade:'', productStatus:'', rawProductId: '', rawProductName: '', rawProductGrade: '', industry: '',materialProductRatioRemarks:'', supplyTime: '存料加工', materialProductRatio: '', rawToProdRatioName: '', quality: '', thickness: '', thicknessTolPos: '', thicknessTolNeg: '', width: '', widthTolPos: '', widthTolNeg: '', length: '', lengthTolPos: '', lengthTolNeg: '', productQuantity: '', unitPrice: '', amountExcludingTax: 0, totalAmount: 0, deliveryDate: '' } | 306 | + return { productId:'', productName:'', productGrade:'', productStatus:'', rawProductId: '', rawProductName: '', rawProductGrade: '', industry: '',materialProductRatioRemarks:'', supplyTime: '存料加工', materialProductRatio: '', materialProductRatioName: '', quality: '', thickness: '', thicknessTolPos: '', thicknessTolNeg: '', width: '', widthTolPos: '', widthTolNeg: '', length: '', lengthTolPos: '', lengthTolNeg: '', productQuantity: '', unitPrice: '', amountExcludingTax: 0, totalAmount: 0, deliveryDate: '' } |
| 297 | }, | 307 | }, |
| 298 | onNumberInput(idx, field) { | 308 | onNumberInput(idx, field) { |
| 299 | const it = this.items[idx] | 309 | const it = this.items[idx] |
| @@ -405,11 +415,25 @@ export default { | @@ -405,11 +415,25 @@ export default { | ||
| 405 | return [t, w, l].filter(Boolean).join(' × ') | 415 | return [t, w, l].filter(Boolean).join(' × ') |
| 406 | }, | 416 | }, |
| 407 | openProductSheet(idx) { | 417 | openProductSheet(idx) { |
| 408 | - const opts = this.selectOptions | 418 | + const opts = this.rawProductOptions |
| 409 | const current = this.items[idx] && this.items[idx].rawProductId | 419 | const current = this.items[idx] && this.items[idx].rawProductId |
| 410 | const match = opts.find(o => String(o.value) === String(current)) | 420 | const match = opts.find(o => String(o.value) === String(current)) |
| 411 | this.sheet = { ...this.sheet, visible: true, title: '请选择原材料名称', options: opts, idx, value: match ? match.value : '', mode: 'product' } | 421 | this.sheet = { ...this.sheet, visible: true, title: '请选择原材料名称', options: opts, idx, value: match ? match.value : '', mode: 'product' } |
| 412 | }, | 422 | }, |
| 423 | + openProductGradeSheet(idx) { | ||
| 424 | + const it = this.items[idx] | ||
| 425 | + if (!it || !it.rawProductId) { | ||
| 426 | + uni.showToast({ title: '请先选择原材料名称', icon: 'none' }) | ||
| 427 | + return | ||
| 428 | + } | ||
| 429 | + const opts = this.rawProductGradeOptions.filter(o => { | ||
| 430 | + const code = o.value | ||
| 431 | + return code && it.rawProductId && String(code).startsWith(String(it.rawProductId)) | ||
| 432 | + }) | ||
| 433 | + const current = it.rawProductGrade | ||
| 434 | + const match = opts.find(o => String(o.value) === String(current)) | ||
| 435 | + this.sheet = { ...this.sheet, visible: true, title: '请选择原材料牌号', options: opts, idx, value: match ? match.value : '', mode: 'grade' } | ||
| 436 | + }, | ||
| 413 | openProductTargetSheet(idx) { | 437 | openProductTargetSheet(idx) { |
| 414 | const opts = this.selectOptions | 438 | const opts = this.selectOptions |
| 415 | const current = this.items[idx] && this.items[idx].productId | 439 | const current = this.items[idx] && this.items[idx].productId |
| @@ -428,10 +452,17 @@ export default { | @@ -428,10 +452,17 @@ export default { | ||
| 428 | if (!it) { this.sheet.visible = false; return } | 452 | if (!it) { this.sheet.visible = false; return } |
| 429 | if (this.sheet.mode === 'ratio') { | 453 | if (this.sheet.mode === 'ratio') { |
| 430 | it.materialProductRatio = value | 454 | it.materialProductRatio = value |
| 431 | - it.rawToProdRatioName = label || '' | 455 | + it.materialProductRatioName = label || '' |
| 432 | } else if (this.sheet.mode === 'product') { | 456 | } else if (this.sheet.mode === 'product') { |
| 457 | + if (it.rawProductId !== value) { | ||
| 458 | + it.rawProductGrade = '' | ||
| 459 | + it.rawProductGradeName = '' | ||
| 460 | + } | ||
| 433 | it.rawProductId = value | 461 | it.rawProductId = value |
| 434 | it.rawProductName = label || '' | 462 | it.rawProductName = label || '' |
| 463 | + } else if (this.sheet.mode === 'grade') { | ||
| 464 | + it.rawProductGrade = value | ||
| 465 | + it.rawProductGradeName = label || '' | ||
| 435 | } else if (this.sheet.mode === 'target') { | 466 | } else if (this.sheet.mode === 'target') { |
| 436 | it.productId = value | 467 | it.productId = value |
| 437 | it.productName = label || '' | 468 | it.productName = label || '' |
| @@ -60,7 +60,7 @@ | @@ -60,7 +60,7 @@ | ||
| 60 | <ProductRel ref="productRel" mode="add" :deliveryDateBase="form.deliveryDate" :deliveryDate="form.orderDate" @change="onProductsChange" :options="productList" /> | 60 | <ProductRel ref="productRel" mode="add" :deliveryDateBase="form.deliveryDate" :deliveryDate="form.orderDate" @change="onProductsChange" :options="productList" /> |
| 61 | <uni-list-item title="合计人民币金额(大写)"> | 61 | <uni-list-item title="合计人民币金额(大写)"> |
| 62 | <template v-slot:footer> | 62 | <template v-slot:footer> |
| 63 | - <uni-easyinput v-model="form.totalAmountCapital" placeholder="自动计算" :inputBorder="false" disabled /> | 63 | + <uni-easyinput v-model="form.totalAmountCapital" placeholder="" :inputBorder="false" disabled /> |
| 64 | </template> | 64 | </template> |
| 65 | </uni-list-item> | 65 | </uni-list-item> |
| 66 | <uni-list-item title="交付定金、数额、时间"> | 66 | <uni-list-item title="交付定金、数额、时间"> |