Commit 6c1d6651a10ac006a088dd6ad70bfae018e5dd46

Authored by 史婷婷
1 parent 6ffa25b4

feat: 补货单-列表&筛选

  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 +
... ...
... ... @@ -672,6 +672,14 @@
672 672 "navigationBarBackgroundColor": "#ffffff",
673 673 "navigationBarTextStyle": "black"
674 674 }
  675 + },
  676 + {
  677 + "path": "pages/replenishment_order/index",
  678 + "style": {
  679 + "navigationBarTitleText": "补货单",
  680 + "navigationBarBackgroundColor": "#ffffff",
  681 + "navigationBarTextStyle": "black"
  682 + }
675 683 }
676 684 ],
677 685 "subPackages": [
... ...
... ... @@ -137,7 +137,6 @@ export default {
137 137
138 138 },
139 139 created() {
140   - this.loadAllDicData()
141 140 this.loadWorkshopOptions()
142 141 },
143 142 onLoad() { },
... ... @@ -267,21 +266,6 @@ export default {
267 266 }
268 267 })
269 268 },
270   - loadAllDicData() {
271   - const dicCodes = ['SHIP_ORDER_STATUS']
272   - return getDicByCodes(dicCodes).then(results => {
273   - this.dicOptions.SHIP_ORDER_STATUS = results.SHIP_ORDER_STATUS.data || []
274   - this.statusLocal = (this.dicOptions.SHIP_ORDER_STATUS || []).map(it => ({
275   - value: it.code,
276   - text: it.name
277   - }))
278   - }).catch(() => {
279   - this.dicOptions = {
280   - SHIP_ORDER_STATUS: [],
281   - }
282   - this.statusLocal = []
283   - })
284   - },
285 269 onCardClick(item) {
286 270 const id = (item && (item.id || item.code)) || ''
287 271 if (!id) return
... ...
  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>
... ...
  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 v-if="$auth.hasPermi('shipping-plan-manage:replenishment-order:add')" class="tool-icon"
  10 + src="/static/images/dev_manage/add_icon.png" @click="onAdd" />
  11 + <image class="tool-icon" src="/static/images/dev_manage/filter_icon.png" @click="openFilter" />
  12 + </view>
  13 + </view>
  14 + </view>
  15 +
  16 +
  17 + <!-- 列表卡片组件 -->
  18 + <view class="list-box">
  19 + <card-list ref="cardRef" :fetch-fn="fetchList" :query="query" :extra="extraParams" row-key="id"
  20 + :enable-refresh="true" :enable-load-more="true" @loaded="onCardLoaded" @error="onCardError">
  21 + <template v-slot="{ item, selected }">
  22 + <view class="card" @click.stop="onCardClick(item)">
  23 + <view class="card-header">
  24 + <text class="title omit2">{{ item.customerName }}</text>
  25 + <text :class="['status', `status_${item.status}`]">{{ filterStatus(item.status) }}</text>
  26 + </view>
  27 + <view class="info-row">
  28 + <text>补货单编号</text><text>{{ item.code || '-' }}</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.deptName || '-' }}</text>
  35 + </view>
  36 + <view class="info-row">
  37 + <text>申请日期</text><text>{{ item.applicationDate || '-' }}</text>
  38 + </view>
  39 + </view>
  40 + </template>
  41 + </card-list>
  42 + </view>
  43 +
  44 +
  45 +
  46 + <!-- 筛选弹框 -->
  47 + <filter-modal :visible.sync="filterVisible" :value.sync="filterForm" title="筛选" @reset="onFilterReset"
  48 + @confirm="onFilterConfirm">
  49 + <template v-slot="{ model }">
  50 + <view class="filter-form">
  51 + <view class="form-item">
  52 + <view class="label">生产厂</view>
  53 + <uni-data-checkbox mode="tag" :multiple="false" :value-field="'value'" :text-field="'text'"
  54 + v-model="model.workshopId" @change="onWorkshopChange" :localdata="workshopOptions" />
  55 + </view>
  56 + <view class="form-item">
  57 + <view class="label">审核状态</view>
  58 + <uni-data-checkbox mode="tag" :multiple="false" :value-field="'value'" :text-field="'text'"
  59 + v-model="model.status" @change="onStatusChange" :localdata="statusLocal" />
  60 + </view>
  61 + <view class="form-item">
  62 + <view class="label">申请日期</view>
  63 + <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" />
  64 + </view>
  65 + </view>
  66 + </template>
  67 + </filter-modal>
  68 + </view>
  69 +</template>
  70 +
  71 +<script>
  72 +import CardList from '@/components/card/index.vue'
  73 +import FilterModal from '@/components/filter/index.vue'
  74 +import { workshopQueryApi } from '@/api/devManage.js'
  75 +import SingleSelectSheet from '@/components/single-select/index.vue'
  76 +import {
  77 + queryApi
  78 +} from '@/api/replenishment_order.js'
  79 +import {
  80 + getDicByCodes
  81 +} from '@/utils/dic'
  82 +import {
  83 + getDicName
  84 +} from '@/utils/dic.js'
  85 +
  86 +export default {
  87 + components: {
  88 + CardList,
  89 + FilterModal,
  90 + SingleSelectSheet
  91 + },
  92 + data() {
  93 + return {
  94 + searchKeyword: '',
  95 + searchKeywordDebounced: '',
  96 + tabs: [],
  97 + // 给到 card 的筛选值
  98 + query: {
  99 + status: '',
  100 + companySuggestedCategory: '',
  101 + dateRange: []
  102 + },
  103 + extraParams: {},
  104 +
  105 + // 批量选择
  106 + rowKey: 'id',
  107 + currentItems: [],
  108 +
  109 + // 筛选弹框
  110 + filterVisible: false,
  111 + filterForm: {
  112 + status: '',
  113 + companySuggestedCategory: '',
  114 + dateRange: []
  115 + },
  116 + dicOptions: {
  117 + AUDIT_STATUS: [],
  118 + },
  119 + statusLocal: [],
  120 + workshopOptions: [],
  121 + }
  122 + },
  123 + computed: {
  124 + extraCombined() {
  125 + return {
  126 + searchKey: this.searchKeywordDebounced || undefined
  127 + }
  128 + }
  129 + },
  130 + watch: {
  131 + extraCombined: {
  132 + deep: true,
  133 + handler(v) {
  134 + this.extraParams = v
  135 + },
  136 + immediate: true
  137 + },
  138 +
  139 + },
  140 + created() {
  141 + this.loadAllDicData()
  142 + this.loadWorkshopOptions()
  143 + },
  144 + onLoad() { },
  145 + // 页面触底兜底:当页面自身滚动到底部时,转调卡片组件加载更多
  146 + onReachBottom() {
  147 + if (this.$refs && this.$refs.cardRef && this.$refs.cardRef.onLoadMore) {
  148 + this.$refs.cardRef.onLoadMore()
  149 + }
  150 + },
  151 + beforeDestroy() {
  152 + if (this.searchDebounceTimer) {
  153 + clearTimeout(this.searchDebounceTimer)
  154 + this.searchDebounceTimer = null
  155 + }
  156 + },
  157 + methods: {
  158 + async loadWorkshopOptions() {
  159 + try {
  160 + const res = await workshopQueryApi({ pageIndex: 1, pageSize: 9999 })
  161 + const list = (res && res.data && res.data.datas) || []
  162 + this.workshopOptions = list.map(it => ({ text: it.name || it.workshopName || '', value: it.id || it.workshopId || '' }))
  163 + } catch (e) {
  164 + this.workshopOptions = []
  165 + }
  166 + },
  167 + onCardLoaded({
  168 + items
  169 + }) {
  170 + this.currentItems = items
  171 + },
  172 + onCardError() {
  173 + uni.showToast({
  174 + title: '列表加载失败',
  175 + icon: 'none'
  176 + })
  177 + },
  178 + // 输入实时搜索:1200ms 防抖,仅在停止输入超过阈值后刷新
  179 + onSearchInput(val) {
  180 + if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer)
  181 + this.searchDebounceTimer = setTimeout(() => {
  182 + this.searchKeywordDebounced = this.searchKeyword
  183 + this.searchDebounceTimer = null
  184 + }, 1200)
  185 + },
  186 + // uni-search-bar 确认搜索:更新关键字并触发 CardList 刷新
  187 + search(e) {
  188 + const val = e && e.value != null ? e.value : this.searchKeyword
  189 + this.searchKeyword = val
  190 + this.searchKeywordDebounced = val
  191 + },
  192 + onAdd() {
  193 + uni.navigateTo({
  194 + url: '/pages/replenishment_order/add'
  195 + })
  196 + },
  197 + openFilter() {
  198 + this.filterVisible = true
  199 + },
  200 + onFilterReset(payload) {
  201 + this.filterForm = payload
  202 + },
  203 + onFilterConfirm(payload) {
  204 + if ((payload.status === '' || payload.status == null) && this.filterForm.status !== '') {
  205 + payload.status = this.filterForm.status
  206 + }
  207 + if ((payload.companySuggestedCategory === '' || payload.companySuggestedCategory == null) && this
  208 + .filterForm
  209 + .companySuggestedCategory !== '') {
  210 + payload.companySuggestedCategory = this.filterForm.companySuggestedCategory
  211 + }
  212 + this.query = {
  213 + ...payload
  214 + }
  215 + },
  216 + onStatusChange(e) {
  217 + const raw = e && e.detail && e.detail.value !== undefined ?
  218 + e.detail.value :
  219 + (e && e.value !== undefined ? e.value : '')
  220 + this.filterForm.status = raw
  221 + },
  222 + onCategoryChange(e) {
  223 + const raw = e && e.detail && e.detail.value !== undefined ? e.detail.value : (e && e.value !== undefined ?
  224 + e.value : '')
  225 + this.filterForm.companySuggestedCategory = raw
  226 + },
  227 +
  228 + // 列表接口(真实请求)
  229 + fetchList({
  230 + pageIndex,
  231 + pageSize,
  232 + query,
  233 + extra
  234 + }) {
  235 + const params = {
  236 + pageIndex,
  237 + pageSize,
  238 + ...extra,
  239 + ...query
  240 + }
  241 + if (Array.isArray(params.dateRange) && params.dateRange.length === 2) {
  242 + params.applicationDateStart = params.dateRange[0]
  243 + params.applicationDateEnd = params.dateRange[1]
  244 + delete params.dateRange
  245 + }
  246 + if (this.searchKeywordDebounced) {
  247 + params.searchKey = this.searchKeywordDebounced
  248 + }
  249 + return queryApi(params)
  250 + .then(res => {
  251 + const _data = res.data || {};
  252 + const records = _data.datas || [];
  253 + const totalCount = _data.totalCount || 0;
  254 + const hasNext = _data.hasNext || false
  255 + return {
  256 + records,
  257 + totalCount,
  258 + hasNext
  259 + }
  260 + })
  261 + .catch(err => {
  262 + console.error('fetchList error', err)
  263 + this.onCardError()
  264 + return {
  265 + records: [],
  266 + totalCount: 0,
  267 + hasNext: false
  268 + }
  269 + })
  270 + },
  271 + loadAllDicData() {
  272 + const dicCodes = ['AUDIT_STATUS']
  273 + return getDicByCodes(dicCodes).then(results => {
  274 + this.dicOptions.AUDIT_STATUS = results.AUDIT_STATUS.data || []
  275 + this.statusLocal = (this.dicOptions.AUDIT_STATUS || []).map(it => ({
  276 + value: it.code,
  277 + text: it.name
  278 + }))
  279 + }).catch(() => {
  280 + this.dicOptions = {
  281 + AUDIT_STATUS: [],
  282 + }
  283 + this.statusLocal = []
  284 + })
  285 + },
  286 + onCardClick(item) {
  287 + const id = (item && (item.id || item.code)) || ''
  288 + if (!id) return
  289 + const query = '?id=' + encodeURIComponent(id)
  290 + uni.navigateTo({
  291 + url: '/pages/car_request_order/detail' + query
  292 + })
  293 + },
  294 + getDicName: getDicName,
  295 + getCategoryClass(categoryName) {
  296 + if (!categoryName) return ''
  297 + if (categoryName.includes('A') || categoryName.includes('a')) {
  298 + return 'category_A'
  299 + } else if (categoryName.includes('B') || categoryName.includes('b')) {
  300 + return 'category_B'
  301 + } else if (categoryName.includes('C') || categoryName.includes('c')) {
  302 + return 'category_C'
  303 + } else if (categoryName.includes('D') || categoryName.includes('d')) {
  304 + return 'category_D'
  305 + }
  306 + },
  307 + onWorkshopChange(e) {
  308 + const raw = e && e.detail && e.detail.value !== undefined ? e.detail.value : (e && e.value !== undefined ? e.value : '')
  309 + this.filterForm.workshopId = raw
  310 + const match = (this.workshopOptions || []).find(o => String(o.value) === String(raw))
  311 + this.filterForm.workshopIdName = match ? (match.text || '') : ''
  312 + },
  313 + filterStatus(status) {
  314 + return this.statusLocal.filter(item => item.value === status)[0].text || '';
  315 + },
  316 + }
  317 +}
  318 +</script>
  319 +
  320 +<style lang="scss" scoped>
  321 +.page {
  322 + display: flex;
  323 + flex-direction: column;
  324 + height: 100vh;
  325 +}
  326 +
  327 +.dev-list-fixed {
  328 + position: fixed;
  329 + top: 96rpx;
  330 + left: 0;
  331 + right: 0;
  332 + z-index: 2;
  333 + background: #fff;
  334 +
  335 + .search-row {
  336 + display: flex;
  337 + align-items: center;
  338 + padding: 16rpx 32rpx;
  339 +
  340 + .uni-searchbar {
  341 + padding: 0;
  342 + flex: 1;
  343 + }
  344 +
  345 + .tool-icons {
  346 + display: flex;
  347 +
  348 + .tool-icon {
  349 + width: 48rpx;
  350 + height: 48rpx;
  351 + display: block;
  352 + margin-left: 32rpx;
  353 + }
  354 + }
  355 + }
  356 +
  357 +}
  358 +
  359 +/* 仅当前页覆盖 uni-search-bar 盒子高度 */
  360 +::v-deep .uni-searchbar__box {
  361 + height: 80rpx !important;
  362 + justify-content: start;
  363 +
  364 + .uni-searchbar__box-search-input {
  365 + font-size: 32rpx !important;
  366 + }
  367 +}
  368 +
  369 +.list-box {
  370 + flex: 1;
  371 + padding-top: 132rpx;
  372 +
  373 + &.pad-batch {
  374 + padding-bottom: 144rpx;
  375 + }
  376 +
  377 + .card {
  378 + position: relative;
  379 + }
  380 +
  381 + .card-header {
  382 + margin-bottom: 28rpx;
  383 + position: relative;
  384 +
  385 + .title {
  386 + font-size: 36rpx;
  387 + font-weight: 600;
  388 + line-height: 50rpx;
  389 + color: rgba(0, 0, 0, 0.9);
  390 + width: 578rpx;
  391 + }
  392 +
  393 + .status {
  394 + font-weight: 600;
  395 + position: absolute;
  396 + top: -32rpx;
  397 + right: -32rpx;
  398 + height: 48rpx;
  399 + line-height: 48rpx;
  400 + color: #fff;
  401 + font-size: 24rpx;
  402 + padding: 0 14rpx;
  403 + border-radius: 6rpx;
  404 +
  405 + // 审核中
  406 + &.status_AUDIT {
  407 + background: $theme-primary;
  408 + }
  409 +
  410 + // 审核通过
  411 + &.status_PASS {
  412 + background: #2BA471;
  413 + }
  414 +
  415 + // 已驳回
  416 + &.status_REFUSE {
  417 + background: #d54941;
  418 + }
  419 +
  420 + // 已取消
  421 + &.status_CANCEL {
  422 + background: #e7e7e7;
  423 + color: rgba(0, 0, 0, 0.6);
  424 + }
  425 +
  426 + }
  427 +
  428 + }
  429 +
  430 + .info-row {
  431 + display: flex;
  432 + align-items: center;
  433 + color: rgba(0, 0, 0, 0.6);
  434 + font-size: 28rpx;
  435 + margin-bottom: 24rpx;
  436 +
  437 + &:last-child {
  438 + margin-bottom: 0;
  439 + }
  440 +
  441 + text {
  442 + width: 60%;
  443 + line-height: 32rpx;
  444 +
  445 + &:last-child {
  446 + color: rgba(0, 0, 0, 0.9);
  447 + width: 40%;
  448 + }
  449 +
  450 + &.category {
  451 + display: inline-block;
  452 + padding: 4rpx 12rpx;
  453 + border-radius: 6rpx;
  454 + font-size: 24rpx;
  455 + width: auto;
  456 +
  457 + &.category_A {
  458 + background: #FFF0ED;
  459 + color: #D54941;
  460 + }
  461 +
  462 + &.category_B {
  463 + background: #FFF1E9;
  464 + color: #E37318;
  465 + }
  466 +
  467 + &.category_C {
  468 + background: #F2F3FF;
  469 + color: $theme-primary;
  470 + }
  471 +
  472 + &.category_D {
  473 + background: #E3F9E9;
  474 + color: #2BA471;
  475 + }
  476 + }
  477 + }
  478 +
  479 + }
  480 +}
  481 +
  482 +.filter-form {
  483 + .form-item {
  484 + margin-bottom: 24rpx;
  485 + }
  486 +
  487 + .label {
  488 + margin-bottom: 20rpx;
  489 + color: rgba(0, 0, 0, 0.9);
  490 + height: 44rpx;
  491 + line-height: 44rpx;
  492 + font-size: 30rpx;
  493 + }
  494 +
  495 + .uni-easyinput {
  496 + border: 1rpx solid #f3f3f3;
  497 + }
  498 +
  499 +}
  500 +
  501 +/* 深度覆盖 uni-data-checkbox(mode=tag)内部的 tag 展示与间距 */
  502 +::v-deep .filter-form .uni-data-checklist .checklist-group {
  503 + .checklist-box {
  504 + &.is--tag {
  505 + width: 212rpx;
  506 + margin-top: 0;
  507 + margin-bottom: 24rpx;
  508 + margin-right: 24rpx;
  509 + height: 80rpx;
  510 + padding: 0;
  511 + border-radius: 12rpx;
  512 + background-color: #f3f3f3;
  513 + border-color: #f3f3f3;
  514 +
  515 + &:nth-child(3n) {
  516 + margin-right: 0;
  517 + }
  518 +
  519 + .checklist-content {
  520 + display: flex;
  521 + justify-content: center;
  522 + }
  523 +
  524 + .checklist-text {
  525 + color: rgba(0, 0, 0, 0.9);
  526 + font-size: 28rpx;
  527 + }
  528 + }
  529 +
  530 + &.is-checked {
  531 + background-color: $theme-primary-plain-bg !important;
  532 + border-color: $theme-primary-plain-bg !important;
  533 +
  534 + .checklist-text {
  535 + color: $theme-primary !important;
  536 + }
  537 + }
  538 + }
  539 +
  540 +}
  541 +</style>
\ No newline at end of file
... ...