Blame view

src/views/project/approve/FieldPanel.vue 9.64 KB
sanmu authored
1
<template>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  <BasicTable @register="registerTable" className="p-0">
    <template #bodyCell="{ column, record }">
      <template v-if="column.key === 'picUrl'">
        <img
          :width="50"
          :height="50"
          :src="record?.orderBaseInfo?.smallPicUrl"
          @click="handlePreview(record?.orderBaseInfo?.picUrl)"
        />
      </template>
      <template v-if="column.key === 'action'">
        <TableAction
          :actions="[
            {
              label: '详情',
              // icon: 'ic:outline-delete-outline',
              onClick: handleDetail.bind(null, record),
            },
          ]"
        />
sanmu authored
22
      </template>
23
24
25
26
    </template>
  </BasicTable>
  <BasicDrawer
    width="500"
sanmu authored
27
    :showFooter="!isApproved && (role === ROLE.ADMIN || role === ROLE.BUSINESS)"
28
29
30
31
32
33
    @register="registerDrawer"
    title="申请信息"
    okText="通过"
    @ok="handleTrue"
  >
    <BaseInfo :baseInfos="baseInfos" />
柏杨 authored
34
    <template v-if="fieldInfos.auditRoleCodes.includes('business_user')">
sanmu authored
35
36
37
38
39
40
41
42
      <h2 className="mt-8">基本信息申请字段</h2>
      <div>{{ fieldInfos.baseFields.join(' , ') }}</div>
    </template>
    <template v-if="!fieldInfos.auditRoleCodes.includes('business_user')">
      <h2 className="mt-8">利润分析表申请字段</h2>
      <div>
        {{ fieldInfos.profitFields.join(' , ') }}
      </div>
柏杨 authored
43
    </template>
柏杨 authored
44
    <template v-if="fieldInfos.auditRoleCodes.includes('business_user')">
sanmu authored
45
46
47
48
      <h2 className="mt-8">项目报告书申请字段</h2>
      <div>
        <span>{{ fieldInfos.reportFields.join(' , ') }}</span>
      </div>
sanmu authored
49
sanmu authored
50
51
52
53
      <h2 className="mt-8">跟单信息申请字段</h2>
      <div>
        <span>{{ fieldInfos.trackStageFields.join(' , ') }}</span>
      </div>
sanmu authored
54
sanmu authored
55
56
57
58
59
      <h2 className="mt-8">质量检测申请字段</h2>
      <div>
        <span>{{ fieldInfos.inspectionStageFields.join(' , ') }}</span>
      </div>
    </template>
60
61
62
63
64
    <template #appendFooter>
      <a-button @click="handleFalse"> 不通过</a-button>
    </template>
  </BasicDrawer>
  <MsgModal v-if="msgVisible" @msg-modal-close="handleMsgModalClose" />
sanmu authored
65
66
</template>
<script lang="ts">
sanmu authored
67
  import MsgModal from './MsgModal.vue';
sanmu authored
68
  import { computed, defineComponent, ref } from 'vue';
sanmu authored
69
70
71
  import { BasicTable, useTable, TableAction } from '/@/components/Table';
  import { BasicDrawer, useDrawer } from '/@/components/Drawer';
  import { approveAuditApi, getApprovedListApi, getWaitListApi } from '/@/api/project/approve';
sanmu authored
72
73
74
75
76
77
78
  import {
    FIELDS_BASE_INFO,
    FIELDS_INSPECTION_INFO,
    FIELDS_PROFIT_INFO,
    FIELDS_REPORT_INFO,
    FIELDS_TRACK_STAGE_INFO,
  } from '../order/tableData';
sanmu authored
79
  import { find, isEmpty } from 'lodash-es';
sanmu authored
80
81
82
  import { ROLE } from '../order//type.d';
  import { useUserStoreWithOut } from '/@/store/modules/user';
  import BaseInfo from './BaseInfo.vue';
83
  import { createImgPreview } from '/@/components/Preview';
84
  import { getFormConfig } from './data';
sanmu authored
85
86

  const userStore = useUserStoreWithOut();
sanmu authored
87
88
89
90
91
92

  export default defineComponent({
    components: {
      BasicTable,
      BasicDrawer,
      TableAction,
sanmu authored
93
      BaseInfo,
sanmu authored
94
      MsgModal,
sanmu authored
95
96
97
98
99
    },
    props: {
      isApproved: { type: Boolean },
    },
    setup(props) {
sanmu authored
100
101
102
      // visible 用于msgModal显示隐藏
      const msgVisible = ref(false);
sanmu authored
103
104
105
106
      const checkedKeys = ref<Array<string | number>>([]);
      const currentKey = ref('1');
      const [registerDrawer, { openDrawer, closeDrawer }] = useDrawer();
      const fieldInfos = ref({
sanmu authored
107
        auditRoleCodes: 'business_user',
sanmu authored
108
109
110
        baseFields: [],
        reportFields: [],
        profitFields: [],
sanmu authored
111
112
        inspectionStageFields: [],
        trackStageFields: [],
sanmu authored
113
114
115
116
      });
      const baseInfos = ref({});
      const id = ref('');
sanmu authored
117
118
119
120
121
122
      let columns = [
        {
          title: '申请人',
          dataIndex: 'createBy',
          width: 150,
        },
123
        {
sanmu authored
124
125
126
127
128
          title: '审核字段类型',
          dataIndex: 'auditRoleCodes',
          width: 150,
          customRender: (column) => {
            const { record } = column || {};
柏杨 authored
129
130
131
            return record?.auditRoleCodes.includes('business_user')
              ? '(基本/报告/跟单/质检)模块'
              : '利润模块';
sanmu authored
132
133
134
          },
        },
        {
135
136
137
138
139
140
141
142
          title: '内部编号',
          dataIndex: 'innerNo',
          width: 150,
          customRender: (column) => {
            const { record } = column || {};
            return record?.orderBaseInfo?.innerNo;
          },
        },
sanmu authored
143
144
145
146
147
148
        {
          title: '图片',
          dataIndex: 'picUrl',
          width: 150,
        },
149
150
151
152
153
        {
          title: '申请原因',
          dataIndex: 'applyRemark',
          width: 150,
        },
sanmu authored
154
      ];
sanmu authored
155
sanmu authored
156
157
      if (props.isApproved) {
        columns = columns.concat([
sanmu authored
158
          {
sanmu authored
159
160
            title: '状态',
            dataIndex: 'status',
sanmu authored
161
            width: 150,
sanmu authored
162
163
164
165
166
            customRender: (column) => {
              const { record } = column || {};

              return record.status === 10 ? '通过' : '拒绝';
            },
sanmu authored
167
          },
sanmu authored
168
169
170
171
          { title: '拒绝原因', dataIndex: 'refuseRemark', width: 250 },
        ]);
      }
      const [registerTable, { reload }] = useTable({
172
        scroll: false,
sanmu authored
173
174
175
        api: props.isApproved ? getApprovedListApi : getWaitListApi,
        searchInfo: { type: 0 },
        columns,
176
        useSearchForm: true,
sanmu authored
177
        formConfig: getFormConfig(true),
sanmu authored
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
        rowKey: 'id',
        actionColumn: {
          width: 160,
          title: 'Action',
          dataIndex: 'action',
          // slots: { customRender: 'action' },
        },
      });

      function onSelect(record, selected) {
        if (selected) {
          checkedKeys.value = [...checkedKeys.value, record.id];
        } else {
          checkedKeys.value = checkedKeys.value.filter((id) => id !== record.id);
        }
      }
      function onSelectAll(selected, selectedRows, changeRows) {
        const changeIds = changeRows.map((item) => item.id);
        if (selected) {
          checkedKeys.value = [...checkedKeys.value, ...changeIds];
        } else {
          checkedKeys.value = checkedKeys.value.filter((id) => {
            return !changeIds.includes(id);
          });
        }
      }
      function handleEdit(record, e) {
        e?.stopPropagation();
        return false;
      }

      function handleProfitModal() {}

      async function handleDetail(data) {
        fieldInfos.value = {
sanmu authored
213
          auditRoleCodes: data.auditRoleCodes,
sanmu authored
214
215
216
          baseFields: [],
          reportFields: [],
          profitFields: [],
sanmu authored
217
218
          inspectionStageFields: [],
          trackStageFields: [],
sanmu authored
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
        };
        openDrawer(true, { data });

        !isEmpty(data.fieldInfos.baseFields) &&
          Object.entries(data.fieldInfos.baseFields)?.map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_BASE_INFO, { field: key });
              fieldInfos.value.baseFields.push(obj?.label);
            }
          });
        !isEmpty(data.fieldInfos.reportFields) &&
          Object.entries(data.fieldInfos.reportFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_REPORT_INFO, { field: key });
              fieldInfos.value.reportFields.push(obj?.label);
            }
          });
        !isEmpty(data.fieldInfos.profitAnalysisFields) &&
          Object.entries(data.fieldInfos.profitAnalysisFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_PROFIT_INFO, { field: key });
              fieldInfos.value.profitFields.push(obj?.label);
            }
          });
sanmu authored
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
        !isEmpty(data.fieldInfos.trackStageFields) &&
          Object.entries(data.fieldInfos.trackStageFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_TRACK_STAGE_INFO, { field: key });
              fieldInfos.value.trackStageFields.push(obj?.label);
            }
          });

        !isEmpty(data.fieldInfos.inspectionStageFields) &&
          Object.entries(data.fieldInfos.inspectionStageFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_INSPECTION_INFO, { field: key });
              fieldInfos.value.inspectionStageFields.push(obj?.label);
            }
          });
sanmu authored
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
        id.value = data.id;
        baseInfos.value = FIELDS_BASE_INFO.map((field) => {
          return {
            label: field.label,
            value: data.orderBaseInfo[field.field],
          };
        }).filter((item) => !!item.value);
      }

      async function handleTrue() {
        await approveAuditApi({ status: 10, id: id.value });
        reload();
        closeDrawer();
      }

      async function handleFalse() {
sanmu authored
276
        msgVisible.value = true;
sanmu authored
277
      }
sanmu authored
278
279
280
281

      const role = computed(() => {
        return userStore.getUserInfo?.roleSmallVO?.code;
      });
sanmu authored
282
283
284
285
286
287
288
289
290
291
292

      // 定义MsgModalClose的事件,方便子组件调用
      const handleMsgModalClose = async (data) => {
        if (data) {
          await approveAuditApi({ status: 20, id: id.value, refuseRemark: data });
          reload();
          closeDrawer();
        }
        msgVisible.value = false;
      };
293
294
295
296
297
      const handlePreview = (url) => {
        createImgPreview({ imageList: [url], defaultWidth: 500 });
        return false;
      };
sanmu authored
298
299
300
301
302
303
304
305
306
307
308
309
310
311
      return {
        handleProfitModal,
        registerTable,
        checkedKeys,
        currentKey,
        onSelect,
        handleEdit,
        onSelectAll,
        handleDetail,
        registerDrawer,
        fieldInfos,
        baseInfos,
        handleTrue,
        handleFalse,
sanmu authored
312
313
        ROLE,
        role,
sanmu authored
314
315
        msgVisible,
        handleMsgModalClose,
316
        handlePreview,
sanmu authored
317
318
319
320
      };
    },
  });
</script>