Commit 03d0135f64b4186c2cc2b3ae59bf6ce75f927a89

Authored by 史婷婷
2 parents c37b38e6 f7657e58

Merge remote-tracking branch 'origin/cjerp-1.0_20251220' into publish_cjerp

... ... @@ -43,7 +43,7 @@
43 43
44 44 <view class="form-item">
45 45 <view class="label">订货日期</view>
46   - <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" />
  46 + <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" @change="onDateChange($event, model)"/>
47 47 </view>
48 48 </view>
49 49 </template>
... ... @@ -137,6 +137,10 @@ export default {
137 137 const raw = e && e.detail && e.detail.value !== undefined ? e.detail.value : (e && e.value !== undefined ? e.value : '')
138 138 this.filterForm.examineStatus = raw
139 139 },
  140 + onDateChange(e, model) {
  141 + // 确保同步更新 filterForm,避免数据不同步
  142 + this.filterForm.dateRange = e
  143 + },
140 144 onLoaded({ items }) { this.currentItems = items || [] },
141 145 onError() { uni.showToast({ title: '列表加载失败', icon: 'none' }) },
142 146 fetchList({ pageIndex, pageSize, query, extra }) {
... ...
... ... @@ -48,7 +48,7 @@
48 48 </view>
49 49 <view class="form-item">
50 50 <view class="label">授权截止时间</view>
51   - <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" />
  51 + <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" @change="onDateChange($event, model)" />
52 52 </view>
53 53 </view>
54 54 </template>
... ... @@ -168,6 +168,11 @@ export default {
168 168 this.filterForm.materialTypeId = raw
169 169 },
170 170
  171 + onDateChange(e, model) {
  172 + // 确保同步更新 filterForm,避免数据不同步
  173 + this.filterForm.dateRange = e
  174 + },
  175 +
171 176 onAdd() {
172 177 uni.navigateTo({ url: '/pages/contract_framework/add' })
173 178 },
... ...
... ... @@ -143,7 +143,7 @@
143 143 </uni-list-item>
144 144 <uni-list-item title="员工人数">
145 145 <template v-slot:footer>
146   - <uni-easyinput type="number" v-model="form.employeeCount" placeholder="请输入员工人数" :inputBorder="false" />
  146 + <uni-easyinput v-model="form.employeeCount" placeholder="请输入员工人数" :inputBorder="false" />
147 147 </template>
148 148 </uni-list-item>
149 149 <uni-list-item title="设备属性">
... ...
... ... @@ -142,7 +142,7 @@
142 142 </uni-list-item>
143 143 <uni-list-item title="员工人数">
144 144 <template v-slot:footer>
145   - <uni-easyinput type="number" v-model="form.employeeCount" placeholder="请输入员工人数" :inputBorder="false" />
  145 + <uni-easyinput v-model="form.employeeCount" placeholder="请输入员工人数" :inputBorder="false" />
146 146 </template>
147 147 </uni-list-item>
148 148 <uni-list-item title="设备属性">
... ...
... ... @@ -6,7 +6,8 @@
6 6 cancelButton="none" bgColor="#F3F3F3" textColor="rgba(0,0,0,0.4)" @confirm="search"
7 7 @input="onSearchInput" />
8 8 <view class="tool-icons">
9   - <image v-if="$auth.hasPermi('customer-credit-manage:customer-credit-plan:add')" class="tool-icon" src="/static/images/dev_manage/add_icon.png" @click="onAdd" />
  9 + <image v-if="$auth.hasPermi('customer-credit-manage:customer-credit-plan:add')" class="tool-icon"
  10 + src="/static/images/dev_manage/add_icon.png" @click="onAdd" />
10 11 <image class="tool-icon" src="/static/images/dev_manage/filter_icon.png" @click="openFilter" />
11 12 </view>
12 13 </view>
... ... @@ -22,22 +23,24 @@
22 23 <view class="card-header">
23 24 <text class="title omit2">{{ item.companyName }}</text>
24 25 <view class="status-box">
25   - <text
26   - :class="['status', `status_${item.status}`]">{{ getDicName('AUDIT_STATUS', item.status, dicOptions.AUDIT_STATUS) }}</text>
27   - <text
28   - v-if="item.frozenStatus === '冻结'"
29   - :class="['status2']">{{ item.frozenStatus === '冻结' ? '已冻结' : '' }}</text>
  26 + <text :class="['status', `status_${item.status}`]">{{ getDicName('AUDIT_STATUS',
  27 + item.status, dicOptions.AUDIT_STATUS) }}</text>
  28 + <text v-if="item.frozenStatus === '冻结'" :class="['status2']">{{ item.frozenStatus ===
  29 + '冻结' ? '已冻结' : '' }}</text>
30 30 </view>
31 31 </view>
32 32 <view class="info-row">
33   - <text>企业类型</text><text>{{ getDicName('ENTERPRISE_TYPE', item.enterpriseType, dicOptions.ENTERPRISE_TYPE) || '-' }}</text>
  33 + <text>企业类型</text><text>{{ getDicName('ENTERPRISE_TYPE', item.enterpriseType,
  34 + dicOptions.ENTERPRISE_TYPE) || '-' }}</text>
34 35 </view>
35 36 <view class="info-row">
36 37 <text>区域</text><text>{{ item.regionName || '-' }}</text>
37 38 </view>
38 39 <view class="info-row">
39 40 <text>客户分类</text><text
40   - :class="[item.companySuggestedCategory ? 'category' : '', getCategoryClass(getDicName('CUSTOMER_CATEGORY', item.companySuggestedCategory, dicOptions.CUSTOMER_CATEGORY))]">{{ getDicName('CUSTOMER_CATEGORY', item.companySuggestedCategory, dicOptions.CUSTOMER_CATEGORY) || '-' }}</text>
  41 + :class="[item.companySuggestedCategory ? 'category' : '', getCategoryClass(getDicName('CUSTOMER_CATEGORY', item.companySuggestedCategory, dicOptions.CUSTOMER_CATEGORY))]">{{
  42 + getDicName('CUSTOMER_CATEGORY', item.companySuggestedCategory,
  43 + dicOptions.CUSTOMER_CATEGORY) || '-' }}</text>
41 44 </view>
42 45 <view class="info-row">
43 46 <text>登记日期</text><text>{{ item.registerDate || '-' }}</text>
... ... @@ -67,7 +70,8 @@
67 70 </view>
68 71 <view class="form-item">
69 72 <view class="label">登记日期</view>
70   - <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" />
  73 + <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01"
  74 + @change="onDateChange($event, model)" />
71 75 </view>
72 76 </view>
73 77 </template>
... ... @@ -76,491 +80,497 @@
76 80 </template>
77 81
78 82 <script>
79   - import CardList from '@/components/card/index.vue'
80   - import FilterModal from '@/components/filter/index.vue'
81   - import SingleSelectSheet from '@/components/single-select/index.vue'
82   - import {
83   - queryApi
84   - } from '@/api/credit_manage.js'
85   - import {
86   - getDicByCodes
87   - } from '@/utils/dic'
88   - import {
89   - getDicName
90   - } from '@/utils/dic.js'
91   -
92   - export default {
93   - components: {
94   - CardList,
95   - FilterModal,
96   - SingleSelectSheet
97   - },
98   - data() {
  83 +import CardList from '@/components/card/index.vue'
  84 +import FilterModal from '@/components/filter/index.vue'
  85 +import SingleSelectSheet from '@/components/single-select/index.vue'
  86 +import {
  87 + queryApi
  88 +} from '@/api/credit_manage.js'
  89 +import {
  90 + getDicByCodes
  91 +} from '@/utils/dic'
  92 +import {
  93 + getDicName
  94 +} from '@/utils/dic.js'
  95 +
  96 +export default {
  97 + components: {
  98 + CardList,
  99 + FilterModal,
  100 + SingleSelectSheet
  101 + },
  102 + data() {
  103 + return {
  104 + searchKeyword: '',
  105 + searchKeywordDebounced: '',
  106 + tabs: [],
  107 + // 给到 card 的筛选值
  108 + query: {
  109 + status: '',
  110 + companySuggestedCategory: '',
  111 + dateRange: []
  112 + },
  113 + extraParams: {},
  114 +
  115 + // 批量选择
  116 + rowKey: 'id',
  117 + currentItems: [],
  118 +
  119 + // 筛选弹框
  120 + filterVisible: false,
  121 + filterForm: {
  122 + status: '',
  123 + companySuggestedCategory: '',
  124 + dateRange: []
  125 + },
  126 + dicOptions: {
  127 + CUSTOMER_CATEGORY: [],
  128 + AUDIT_STATUS: [],
  129 + ENTERPRISE_TYPE: [],
  130 + CREDIT_ZONE: []
  131 + },
  132 + statusLocal: [],
  133 + categoryLocal: []
  134 + }
  135 + },
  136 + computed: {
  137 + extraCombined() {
99 138 return {
100   - searchKeyword: '',
101   - searchKeywordDebounced: '',
102   - tabs: [],
103   - // 给到 card 的筛选值
104   - query: {
105   - status: '',
106   - companySuggestedCategory: '',
107   - dateRange: []
108   - },
109   - extraParams: {},
110   -
111   - // 批量选择
112   - rowKey: 'id',
113   - currentItems: [],
114   -
115   - // 筛选弹框
116   - filterVisible: false,
117   - filterForm: {
118   - status: '',
119   - companySuggestedCategory: '',
120   - dateRange: []
121   - },
122   - dicOptions: {
123   - CUSTOMER_CATEGORY: [],
124   - AUDIT_STATUS: [],
125   - ENTERPRISE_TYPE: [],
126   - CREDIT_ZONE: []
127   - },
128   - statusLocal: [],
129   - categoryLocal: []
130   - }
131   - },
132   - computed: {
133   - extraCombined() {
134   - return {
135   - companyName: this.searchKeywordDebounced || undefined
136   - }
  139 + companyName: this.searchKeywordDebounced || undefined
137 140 }
138   - },
139   - watch: {
140   - extraCombined: {
141   - deep: true,
142   - handler(v) {
143   - this.extraParams = v
144   - },
145   - immediate: true
  141 + }
  142 + },
  143 + watch: {
  144 + extraCombined: {
  145 + deep: true,
  146 + handler(v) {
  147 + this.extraParams = v
146 148 },
147   -
  149 + immediate: true
148 150 },
149   - created() {
150   - this.loadAllDicData()
  151 +
  152 + },
  153 + created() {
  154 + this.loadAllDicData()
  155 + },
  156 + onLoad() { },
  157 + // 页面触底兜底:当页面自身滚动到底部时,转调卡片组件加载更多
  158 + onReachBottom() {
  159 + if (this.$refs && this.$refs.cardRef && this.$refs.cardRef.onLoadMore) {
  160 + this.$refs.cardRef.onLoadMore()
  161 + }
  162 + },
  163 + beforeDestroy() {
  164 + if (this.searchDebounceTimer) {
  165 + clearTimeout(this.searchDebounceTimer)
  166 + this.searchDebounceTimer = null
  167 + }
  168 + },
  169 + methods: {
  170 + onCardLoaded({
  171 + items
  172 + }) {
  173 + this.currentItems = items
151 174 },
152   - onLoad() {},
153   - // 页面触底兜底:当页面自身滚动到底部时,转调卡片组件加载更多
154   - onReachBottom() {
155   - if (this.$refs && this.$refs.cardRef && this.$refs.cardRef.onLoadMore) {
156   - this.$refs.cardRef.onLoadMore()
157   - }
  175 + onCardError() {
  176 + uni.showToast({
  177 + title: '列表加载失败',
  178 + icon: 'none'
  179 + })
158 180 },
159   - beforeDestroy() {
160   - if (this.searchDebounceTimer) {
161   - clearTimeout(this.searchDebounceTimer)
  181 + // 输入实时搜索:1200ms 防抖,仅在停止输入超过阈值后刷新
  182 + onSearchInput(val) {
  183 + if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer)
  184 + this.searchDebounceTimer = setTimeout(() => {
  185 + this.searchKeywordDebounced = this.searchKeyword
162 186 this.searchDebounceTimer = null
  187 + }, 1200)
  188 + },
  189 + // uni-search-bar 确认搜索:更新关键字并触发 CardList 刷新
  190 + search(e) {
  191 + const val = e && e.value != null ? e.value : this.searchKeyword
  192 + this.searchKeyword = val
  193 + this.searchKeywordDebounced = val
  194 + },
  195 + onAdd() {
  196 + uni.navigateTo({
  197 + url: '/pages/credit_manage/add'
  198 + })
  199 + },
  200 + openFilter() {
  201 + this.filterVisible = true
  202 + },
  203 + onFilterReset(payload) {
  204 + this.filterForm = payload
  205 + },
  206 + onFilterConfirm(payload) {
  207 + if ((payload.status === '' || payload.status == null) && this.filterForm.status !== '') {
  208 + payload.status = this.filterForm.status
  209 + }
  210 + if ((payload.companySuggestedCategory === '' || payload.companySuggestedCategory == null) && this
  211 + .filterForm
  212 + .companySuggestedCategory !== '') {
  213 + payload.companySuggestedCategory = this.filterForm.companySuggestedCategory
  214 + }
  215 + this.query = {
  216 + ...payload
163 217 }
164 218 },
165   - methods: {
166   - onCardLoaded({
167   - items
168   - }) {
169   - this.currentItems = items
170   - },
171   - onCardError() {
172   - uni.showToast({
173   - title: '列表加载失败',
174   - icon: 'none'
175   - })
176   - },
177   - // 输入实时搜索:1200ms 防抖,仅在停止输入超过阈值后刷新
178   - onSearchInput(val) {
179   - if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer)
180   - this.searchDebounceTimer = setTimeout(() => {
181   - this.searchKeywordDebounced = this.searchKeyword
182   - this.searchDebounceTimer = null
183   - }, 1200)
184   - },
185   - // uni-search-bar 确认搜索:更新关键字并触发 CardList 刷新
186   - search(e) {
187   - const val = e && e.value != null ? e.value : this.searchKeyword
188   - this.searchKeyword = val
189   - this.searchKeywordDebounced = val
190   - },
191   - onAdd() {
192   - uni.navigateTo({
193   - url: '/pages/credit_manage/add'
194   - })
195   - },
196   - openFilter() {
197   - this.filterVisible = true
198   - },
199   - onFilterReset(payload) {
200   - this.filterForm = payload
201   - },
202   - onFilterConfirm(payload) {
203   - if ((payload.status === '' || payload.status == null) && this.filterForm.status !== '') {
204   - payload.status = this.filterForm.status
205   - }
206   - if ((payload.companySuggestedCategory === '' || payload.companySuggestedCategory == null) && this
207   - .filterForm
208   - .companySuggestedCategory !== '') {
209   - payload.companySuggestedCategory = this.filterForm.companySuggestedCategory
210   - }
211   - this.query = {
212   - ...payload
213   - }
214   - },
215   - onStatusChange(e) {
216   - const raw = e && e.detail && e.detail.value !== undefined ?
217   - e.detail.value :
218   - (e && e.value !== undefined ? e.value : '')
219   - this.filterForm.status = raw
220   - },
221   - onCategoryChange(e) {
222   - const raw = e && e.detail && e.detail.value !== undefined ? e.detail.value : (e && e.value !== undefined ?
223   - e.value : '')
224   - this.filterForm.companySuggestedCategory = raw
225   - },
226   -
227   - // 列表接口(真实请求)
228   - fetchList({
  219 + onStatusChange(e) {
  220 + const raw = e && e.detail && e.detail.value !== undefined ?
  221 + e.detail.value :
  222 + (e && e.value !== undefined ? e.value : '')
  223 + this.filterForm.status = raw
  224 + },
  225 + onCategoryChange(e) {
  226 + const raw = e && e.detail && e.detail.value !== undefined ? e.detail.value : (e && e.value !== undefined ?
  227 + e.value : '')
  228 + this.filterForm.companySuggestedCategory = raw
  229 + },
  230 + onDateChange(e, model) {
  231 + // 确保同步更新 filterForm,避免数据不同步
  232 + this.filterForm.dateRange = e
  233 + },
  234 + // 列表接口(真实请求)
  235 + fetchList({
  236 + pageIndex,
  237 + pageSize,
  238 + query,
  239 + extra
  240 + }) {
  241 + const params = {
229 242 pageIndex,
230 243 pageSize,
231   - query,
232   - extra
233   - }) {
234   - const params = {
235   - pageIndex,
236   - pageSize,
237   - ...extra,
238   - ...query
239   - }
240   - if (Array.isArray(params.dateRange) && params.dateRange.length === 2) {
241   - params.registerDateStart = params.dateRange[0] + ' 00:00:00'
242   - params.registerDateEnd = params.dateRange[1] + ' 23:59:59'
243   - delete params.dateRange
244   - }
245   - if (this.searchKeywordDebounced) {
246   - params.companyName = this.searchKeywordDebounced
247   - }
248   - return queryApi(params)
249   - .then(res => {
250   - const _data = res.data || {};
251   - const records = _data.datas || [];
252   - const totalCount = _data.totalCount || 0;
253   - const hasNext = _data.hasNext || false
254   - return {
255   - records,
256   - totalCount,
257   - hasNext
258   - }
259   - })
260   - .catch(err => {
261   - console.error('fetchList error', err)
262   - this.onCardError()
263   - return {
264   - records: [],
265   - totalCount: 0,
266   - hasNext: false
267   - }
268   - })
269   - },
270   - loadAllDicData() {
271   - const dicCodes = ['CUSTOMER_CATEGORY', 'AUDIT_STATUS', 'ENTERPRISE_TYPE', 'CREDIT_ZONE']
272   - return getDicByCodes(dicCodes).then(results => {
273   - this.dicOptions.CUSTOMER_CATEGORY = results.CUSTOMER_CATEGORY.data || []
274   - this.dicOptions.AUDIT_STATUS = results.AUDIT_STATUS.data || []
275   - this.dicOptions.ENTERPRISE_TYPE = results.ENTERPRISE_TYPE.data || []
276   - this.dicOptions.CREDIT_ZONE = results.CREDIT_ZONE.data || [];
277   - this.categoryLocal = (this.dicOptions.CUSTOMER_CATEGORY || []).map(it => ({
278   - value: it.code,
279   - text: it.name
280   - }))
281   - this.statusLocal = (this.dicOptions.AUDIT_STATUS || []).map(it => ({
282   - value: it.code,
283   - text: it.name
284   - }))
285   - }).catch(() => {
286   - this.dicOptions = {
287   - CUSTOMER_CATEGORY: [],
288   - AUDIT_STATUS: [],
289   - ENTERPRISE_TYPE: [],
290   - CREDIT_ZONE: []
  244 + ...extra,
  245 + ...query
  246 + }
  247 + if (Array.isArray(params.dateRange) && params.dateRange.length === 2) {
  248 + params.registerDateStart = params.dateRange[0] + ' 00:00:00'
  249 + params.registerDateEnd = params.dateRange[1] + ' 23:59:59'
  250 + delete params.dateRange
  251 + }
  252 + if (this.searchKeywordDebounced) {
  253 + params.companyName = this.searchKeywordDebounced
  254 + }
  255 + return queryApi(params)
  256 + .then(res => {
  257 + const _data = res.data || {};
  258 + const records = _data.datas || [];
  259 + const totalCount = _data.totalCount || 0;
  260 + const hasNext = _data.hasNext || false
  261 + return {
  262 + records,
  263 + totalCount,
  264 + hasNext
291 265 }
292   - this.categoryLocal = []
293   - this.statusLocal = []
294 266 })
295   - },
296   - onCardClick(item) {
297   - const id = (item && (item.id || item.code)) || ''
298   - if (!id) return
299   - const query = '?id=' + encodeURIComponent(id)
300   - uni.navigateTo({
301   - url: '/pages/credit_manage/detail' + query
  267 + .catch(err => {
  268 + console.error('fetchList error', err)
  269 + this.onCardError()
  270 + return {
  271 + records: [],
  272 + totalCount: 0,
  273 + hasNext: false
  274 + }
302 275 })
303   - },
304   - getDicName: getDicName,
305   - getCategoryClass(categoryName) {
306   - if (!categoryName) return ''
307   - if (categoryName.includes('A') || categoryName.includes('a')) {
308   - return 'category_A'
309   - } else if (categoryName.includes('B') || categoryName.includes('b')) {
310   - return 'category_B'
311   - } else if (categoryName.includes('C') || categoryName.includes('c')) {
312   - return 'category_C'
313   - } else if (categoryName.includes('D') || categoryName.includes('d')) {
314   - return 'category_D'
  276 + },
  277 + loadAllDicData() {
  278 + const dicCodes = ['CUSTOMER_CATEGORY', 'AUDIT_STATUS', 'ENTERPRISE_TYPE', 'CREDIT_ZONE']
  279 + return getDicByCodes(dicCodes).then(results => {
  280 + this.dicOptions.CUSTOMER_CATEGORY = results.CUSTOMER_CATEGORY.data || []
  281 + this.dicOptions.AUDIT_STATUS = results.AUDIT_STATUS.data || []
  282 + this.dicOptions.ENTERPRISE_TYPE = results.ENTERPRISE_TYPE.data || []
  283 + this.dicOptions.CREDIT_ZONE = results.CREDIT_ZONE.data || [];
  284 + this.categoryLocal = (this.dicOptions.CUSTOMER_CATEGORY || []).map(it => ({
  285 + value: it.code,
  286 + text: it.name
  287 + }))
  288 + this.statusLocal = (this.dicOptions.AUDIT_STATUS || []).map(it => ({
  289 + value: it.code,
  290 + text: it.name
  291 + }))
  292 + }).catch(() => {
  293 + this.dicOptions = {
  294 + CUSTOMER_CATEGORY: [],
  295 + AUDIT_STATUS: [],
  296 + ENTERPRISE_TYPE: [],
  297 + CREDIT_ZONE: []
315 298 }
  299 + this.categoryLocal = []
  300 + this.statusLocal = []
  301 + })
  302 + },
  303 + onCardClick(item) {
  304 + const id = (item && (item.id || item.code)) || ''
  305 + if (!id) return
  306 + const query = '?id=' + encodeURIComponent(id)
  307 + uni.navigateTo({
  308 + url: '/pages/credit_manage/detail' + query
  309 + })
  310 + },
  311 + getDicName: getDicName,
  312 + getCategoryClass(categoryName) {
  313 + if (!categoryName) return ''
  314 + if (categoryName.includes('A') || categoryName.includes('a')) {
  315 + return 'category_A'
  316 + } else if (categoryName.includes('B') || categoryName.includes('b')) {
  317 + return 'category_B'
  318 + } else if (categoryName.includes('C') || categoryName.includes('c')) {
  319 + return 'category_C'
  320 + } else if (categoryName.includes('D') || categoryName.includes('d')) {
  321 + return 'category_D'
316 322 }
317   -
318 323 }
  324 +
319 325 }
  326 +}
320 327 </script>
321 328
322 329 <style lang="scss" scoped>
323   - .page {
  330 +.page {
  331 + display: flex;
  332 + flex-direction: column;
  333 + height: 100vh;
  334 +}
  335 +
  336 +.dev-list-fixed {
  337 + position: fixed;
  338 + top: 96rpx;
  339 + left: 0;
  340 + right: 0;
  341 + z-index: 2;
  342 + background: #fff;
  343 +
  344 + .search-row {
324 345 display: flex;
325   - flex-direction: column;
326   - height: 100vh;
327   - }
  346 + align-items: center;
  347 + padding: 16rpx 32rpx;
328 348
329   - .dev-list-fixed {
330   - position: fixed;
331   - top: 96rpx;
332   - left: 0;
333   - right: 0;
334   - z-index: 2;
335   - background: #fff;
  349 + .uni-searchbar {
  350 + padding: 0;
  351 + flex: 1;
  352 + }
336 353
337   - .search-row {
  354 + .tool-icons {
338 355 display: flex;
339   - align-items: center;
340   - padding: 16rpx 32rpx;
341 356
342   - .uni-searchbar {
343   - padding: 0;
344   - flex: 1;
  357 + .tool-icon {
  358 + width: 48rpx;
  359 + height: 48rpx;
  360 + display: block;
  361 + margin-left: 32rpx;
345 362 }
  363 + }
  364 + }
346 365
347   - .tool-icons {
348   - display: flex;
  366 +}
349 367
350   - .tool-icon {
351   - width: 48rpx;
352   - height: 48rpx;
353   - display: block;
354   - margin-left: 32rpx;
355   - }
356   - }
357   - }
  368 +/* 仅当前页覆盖 uni-search-bar 盒子高度 */
  369 +::v-deep .uni-searchbar__box {
  370 + height: 80rpx !important;
  371 + justify-content: start;
358 372
  373 + .uni-searchbar__box-search-input {
  374 + font-size: 32rpx !important;
359 375 }
  376 +}
360 377
361   - /* 仅当前页覆盖 uni-search-bar 盒子高度 */
362   - ::v-deep .uni-searchbar__box {
363   - height: 80rpx !important;
364   - justify-content: start;
  378 +.list-box {
  379 + flex: 1;
  380 + padding-top: 132rpx;
365 381
366   - .uni-searchbar__box-search-input {
367   - font-size: 32rpx !important;
368   - }
  382 + &.pad-batch {
  383 + padding-bottom: 144rpx;
369 384 }
370 385
371   - .list-box {
372   - flex: 1;
373   - padding-top: 132rpx;
  386 + .card {
  387 + position: relative;
  388 + }
374 389
375   - &.pad-batch {
376   - padding-bottom: 144rpx;
377   - }
  390 + .card-header {
  391 + margin-bottom: 28rpx;
  392 + position: relative;
378 393
379   - .card {
380   - position: relative;
  394 + .title {
  395 + font-size: 36rpx;
  396 + font-weight: 600;
  397 + line-height: 50rpx;
  398 + color: rgba(0, 0, 0, 0.9);
  399 + width: 578rpx;
381 400 }
382 401
383   - .card-header {
384   - margin-bottom: 28rpx;
385   - position: relative;
  402 + .status-box {
  403 + position: absolute;
  404 + top: -32rpx;
  405 + right: -32rpx;
386 406
387   - .title {
388   - font-size: 36rpx;
  407 + .status {
  408 + display: block;
  409 + height: 48rpx;
  410 + line-height: 48rpx;
389 411 font-weight: 600;
390   - line-height: 50rpx;
391   - color: rgba(0,0,0,0.9);
392   - width: 578rpx;
393   - }
394   -
395   - .status-box {
396   - position: absolute;
397   - top: -32rpx;
398   - right: -32rpx;
399   -
400   - .status {
401   - display: block;
402   - height: 48rpx;
403   - line-height: 48rpx;
404   - font-weight: 600;
405   - color: #fff;
406   - font-size: 24rpx;
407   - padding: 0 14rpx;
408   - border-radius: 6rpx;
409   - margin-bottom: 8rpx;
410   -
411   - &.status_AUDIT {
412   - background: $theme-primary;
413   - }
414   -
415   - &.status_PASS {
416   - background: #2BA471;
417   - }
  412 + color: #fff;
  413 + font-size: 24rpx;
  414 + padding: 0 14rpx;
  415 + border-radius: 6rpx;
  416 + margin-bottom: 8rpx;
  417 +
  418 + &.status_AUDIT {
  419 + background: $theme-primary;
  420 + }
418 421
419   - &.status_REFUSE {
420   - background: #D54941;
421   - }
  422 + &.status_PASS {
  423 + background: #2BA471;
  424 + }
422 425
423   - &.status_CANCEL {
424   - background: #E7E7E7;
425   - color: rgba(0,0,0,0.9);
426   - }
  426 + &.status_REFUSE {
  427 + background: #D54941;
427 428 }
428 429
429   - .status2 {
430   - display: block;
431   - font-weight: 600;
432   - line-height: 48rpx;
433   - height: 48rpx;
434   - color: #fff;
435   - font-size: 24rpx;
436   - padding: 0 14rpx;
437   - border-radius: 6rpx;
  430 + &.status_CANCEL {
438 431 background: #E7E7E7;
439   - color: rgba(0,0,0,0.9);
440   -
  432 + color: rgba(0, 0, 0, 0.9);
441 433 }
  434 + }
  435 +
  436 + .status2 {
  437 + display: block;
  438 + font-weight: 600;
  439 + line-height: 48rpx;
  440 + height: 48rpx;
  441 + color: #fff;
  442 + font-size: 24rpx;
  443 + padding: 0 14rpx;
  444 + border-radius: 6rpx;
  445 + background: #E7E7E7;
  446 + color: rgba(0, 0, 0, 0.9);
442 447
443 448 }
444 449
445 450 }
446 451
447   - .info-row {
448   - display: flex;
449   - align-items: center;
450   - color: rgba(0, 0, 0, 0.6);
451   - font-size: 28rpx;
452   - margin-bottom: 24rpx;
  452 + }
  453 +
  454 + .info-row {
  455 + display: flex;
  456 + align-items: center;
  457 + color: rgba(0, 0, 0, 0.6);
  458 + font-size: 28rpx;
  459 + margin-bottom: 24rpx;
  460 +
  461 + &:last-child {
  462 + margin-bottom: 0;
  463 + }
  464 +
  465 + text {
  466 + width: 60%;
  467 + line-height: 32rpx;
453 468
454 469 &:last-child {
455   - margin-bottom: 0;
  470 + color: rgba(0, 0, 0, 0.9);
  471 + width: 40%;
456 472 }
457 473
458   - text {
459   - width: 60%;
460   - line-height: 32rpx;
  474 + &.category {
  475 + display: inline-block;
  476 + padding: 4rpx 12rpx;
  477 + border-radius: 6rpx;
  478 + font-size: 24rpx;
  479 + width: auto;
461 480
462   - &:last-child {
463   - color: rgba(0, 0, 0, 0.9);
464   - width: 40%;
  481 + &.category_A {
  482 + background: #FFF0ED;
  483 + color: #D54941;
465 484 }
466 485
467   - &.category {
468   - display: inline-block;
469   - padding: 4rpx 12rpx;
470   - border-radius: 6rpx;
471   - font-size: 24rpx;
472   - width: auto;
473   - &.category_A {
474   - background: #FFF0ED;
475   - color: #D54941;
476   - }
477   - &.category_B {
478   - background: #FFF1E9;
479   - color: #E37318;
480   - }
481   - &.category_C {
482   - background: #F2F3FF;
483   - color: $theme-primary;
484   - }
485   - &.category_D {
486   - background: #E3F9E9;
487   - color: #2BA471;
488   - }
  486 + &.category_B {
  487 + background: #FFF1E9;
  488 + color: #E37318;
  489 + }
  490 +
  491 + &.category_C {
  492 + background: #F2F3FF;
  493 + color: $theme-primary;
489 494 }
490   - }
491 495
  496 + &.category_D {
  497 + background: #E3F9E9;
  498 + color: #2BA471;
  499 + }
  500 + }
492 501 }
  502 +
493 503 }
  504 +}
494 505
495   - .filter-form {
496   - .form-item {
497   - margin-bottom: 24rpx;
498   - }
  506 +.filter-form {
  507 + .form-item {
  508 + margin-bottom: 24rpx;
  509 + }
499 510
500   - .label {
501   - margin-bottom: 20rpx;
502   - color: rgba(0, 0, 0, 0.9);
503   - height: 44rpx;
504   - line-height: 44rpx;
505   - font-size: 30rpx;
  511 + .label {
  512 + margin-bottom: 20rpx;
  513 + color: rgba(0, 0, 0, 0.9);
  514 + height: 44rpx;
  515 + line-height: 44rpx;
  516 + font-size: 30rpx;
  517 + }
  518 +
  519 + .fake-select {
  520 + height: 80rpx;
  521 + line-height: 80rpx;
  522 + padding: 0 20rpx;
  523 + background: #f3f3f3;
  524 + border-radius: 12rpx;
  525 +
  526 + .placeholder {
  527 + color: #999;
506 528 }
507 529
508   - .fake-select {
  530 + .value {
  531 + color: #333;
  532 + }
  533 + }
  534 +}
  535 +
  536 +/* 深度覆盖 uni-data-checkbox(mode=tag)内部的 tag 展示与间距 */
  537 +::v-deep .filter-form .uni-data-checklist .checklist-group {
  538 + .checklist-box {
  539 + &.is--tag {
  540 + width: 212rpx;
  541 + margin-top: 0;
  542 + margin-bottom: 24rpx;
  543 + margin-right: 24rpx;
509 544 height: 80rpx;
510   - line-height: 80rpx;
511   - padding: 0 20rpx;
512   - background: #f3f3f3;
  545 + padding: 0;
513 546 border-radius: 12rpx;
  547 + background-color: #f3f3f3;
  548 + border-color: #f3f3f3;
514 549
515   - .placeholder {
516   - color: #999;
  550 + &:nth-child(3n) {
  551 + margin-right: 0;
517 552 }
518 553
519   - .value {
520   - color: #333;
  554 + .checklist-content {
  555 + display: flex;
  556 + justify-content: center;
521 557 }
522   - }
523   - }
524   -
525   - /* 深度覆盖 uni-data-checkbox(mode=tag)内部的 tag 展示与间距 */
526   - ::v-deep .filter-form .uni-data-checklist .checklist-group {
527   - .checklist-box {
528   - &.is--tag {
529   - width: 212rpx;
530   - margin-top: 0;
531   - margin-bottom: 24rpx;
532   - margin-right: 24rpx;
533   - height: 80rpx;
534   - padding: 0;
535   - border-radius: 12rpx;
536   - background-color: #f3f3f3;
537   - border-color: #f3f3f3;
538   -
539   - &:nth-child(3n) {
540   - margin-right: 0;
541   - }
542   -
543   - .checklist-content {
544   - display: flex;
545   - justify-content: center;
546   - }
547 558
548   - .checklist-text {
549   - color: rgba(0, 0, 0, 0.9);
550   - font-size: 28rpx;
551   - }
  559 + .checklist-text {
  560 + color: rgba(0, 0, 0, 0.9);
  561 + font-size: 28rpx;
552 562 }
  563 + }
553 564
554   - &.is-checked {
555   - background-color: $theme-primary-plain-bg !important;
556   - border-color: $theme-primary-plain-bg !important;
  565 + &.is-checked {
  566 + background-color: $theme-primary-plain-bg !important;
  567 + border-color: $theme-primary-plain-bg !important;
557 568
558   - .checklist-text {
559   - color: $theme-primary !important;
560   - }
  569 + .checklist-text {
  570 + color: $theme-primary !important;
561 571 }
562 572 }
563   -
564 573 }
565 574
  575 +}
566 576 </style>
\ No newline at end of file
... ...
... ... @@ -141,7 +141,7 @@
141 141 </uni-list-item>
142 142 <uni-list-item title="员工人数">
143 143 <template v-slot:footer>
144   - <uni-easyinput type="number" v-model="form.employeeCount" placeholder="请输入员工人数" :inputBorder="false" />
  144 + <uni-easyinput v-model="form.employeeCount" placeholder="请输入员工人数" :inputBorder="false" />
145 145 </template>
146 146 </uni-list-item>
147 147 <uni-list-item title="设备属性">
... ...
... ... @@ -84,7 +84,8 @@
84 84 </view>
85 85 <view class="form-item">
86 86 <view class="label">创建时间</view>
87   - <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" />
  87 + <uni-datetime-picker type="daterange" :value="model.dateRange" start="2023-01-01"
  88 + @change="onDateChange($event, model)" />
88 89 </view>
89 90 </view>
90 91 </template>
... ... @@ -299,11 +300,16 @@
299 300 this.officeSelectVisible = true
300 301 },
301 302 onOfficeConfirm(payload) {
  303 + console.log('onOfficeConfirm__this.filterForm', this.filterForm)
302 304 const val = payload && payload.value != null ? payload.value : ''
303 305 const label = payload && payload.label != null ? payload.label : ''
304 306 this.filterForm.officeId = val
305 307 this.filterForm.officeName = label
306 308 },
  309 + onDateChange(e, model) {
  310 + // 确保同步更新 filterForm,避免数据不同步
  311 + this.filterForm.dateRange = e
  312 + },
307 313 toggleBatch() {
308 314 this.batchMode = !this.batchMode
309 315 if (!this.batchMode) this.selectedKeys = []
... ... @@ -456,7 +462,7 @@
456 462 const query = '?id=' + encodeURIComponent(id) + '&todoType=' + encodeURIComponent(this.todoType || '')
457 463 uni.navigateTo({ url: '/pages/dev_manage/detail' + query })
458 464 },
459   -
  465 +
460 466 }
461 467 }
462 468 </script>
... ...
... ... @@ -43,7 +43,7 @@
43 43 <view class="form-item">
44 44 <view class="label">办事处</view>
45 45 <uni-easyinput v-model="model.deptName" placeholder="请输入办事处" :inputBorder="false"
46   - placeholderStyle="font-size:14px" />
  46 + placeholderStyle="font-size:14px" @input="onDeptNameInput" />
47 47 </view>
48 48
49 49 <view class="form-item">
... ... @@ -66,7 +66,7 @@
66 66
67 67 <view class="form-item">
68 68 <view class="label">订货日期</view>
69   - <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" />
  69 + <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" @change="onDateChange($event, model)" />
70 70 </view>
71 71 </view>
72 72 </template>
... ... @@ -215,6 +215,13 @@ export default {
215 215 type: this.tabValue || ''
216 216 }
217 217 },
  218 + onDateChange(e, model) {
  219 + // 确保同步更新 filterForm,避免数据不同步
  220 + this.filterForm.dateRange = e
  221 + },
  222 + onDeptNameInput(val) {
  223 + this.filterForm.deptName = val
  224 + },
218 225 onLoaded({ items }) { this.currentItems = items || [] },
219 226 onError() { uni.showToast({ title: '列表加载失败', icon: 'none' }) },
220 227 fetchList({ pageIndex, pageSize, query, extra }) {
... ...
... ... @@ -42,7 +42,7 @@
42 42
43 43 <view class="form-item">
44 44 <view class="label">订货日期</view>
45   - <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" />
  45 + <uni-datetime-picker type="daterange" v-model="model.dateRange" start="2023-01-01" @change="onDateChange($event, model)" />
46 46 </view>
47 47 </view>
48 48 </template>
... ... @@ -136,6 +136,10 @@ export default {
136 136 const raw = e && e.detail && e.detail.value !== undefined ? e.detail.value : (e && e.value !== undefined ? e.value : '')
137 137 this.filterForm.status = raw
138 138 },
  139 + onDateChange(e, model) {
  140 + // 确保同步更新 filterForm,避免数据不同步
  141 + this.filterForm.dateRange = e
  142 + },
139 143 onLoaded({ items }) { this.currentItems = items || [] },
140 144 onError() { uni.showToast({ title: '列表加载失败', icon: 'none' }) },
141 145 fetchList({ pageIndex, pageSize, query, extra }) {
... ...