123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- import BaseModel from '../../../core/base'
- import { dateFormatter, formatMoney } from '@jy/util'
- /**
- * 摘要 Item 基础类
- */
- class SummaryItem {
- constructor(map, data, config = { formatter: null, expands: {}, type: '' }) {
- this.map = map
- this.data = data
- this.configMap = {}
- this.config = config
- }
- append(key, { formatter = null, expands = {}, type } = {}) {
- this.configMap[key] = {
- formatter,
- expands,
- type
- }
- }
- customCreate({ label, type, key, value, expands, formatter } = {}) {
- return {
- label,
- type,
- data: {
- key,
- value: typeof formatter === 'function' ? formatter(value) : value,
- ...expands
- }
- }
- }
- create(key) {
- const formatter = this.configMap[key]?.formatter || this.config.formatter
- const value = this.data[key]
- const expands = this.configMap[key]?.expands || this.config.expands
- const type = this.configMap[key]?.type || this.config.type
- return this.customCreate({
- label: this.map[key],
- type,
- key,
- value,
- expands,
- formatter
- })
- }
- createList(list = Object.keys(this.map)) {
- return list.map((key) => this.create(key))
- }
- }
- class SummaryModel extends BaseModel {
- constructor(config) {
- super(config)
- }
- createModel() {
- return {
- list: [],
- // 采购单位
- buyers: [],
- // 中标单位
- winners: []
- }
- }
- formatModel(data, isInit = false) {
- const { baseInfo, abstract } = data
- const isProposed = baseInfo?.subType === '拟建'
- const model = isProposed
- ? this.tranSummaryOfProposed(abstract.proposed)
- : this.tranSummaryOfDefault(abstract.default)
- return model
- }
- tranSummaryOfDefault(summary) {
- const result = this.createModel()
- const summaryMap = {
- buyer: '采购单位',
- buyerContactInfo: '采购联系人/电话',
- agency: '代理机构',
- agencyContactInfo: '代理联系人/电话',
- signEndTime: '报名截止日期',
- bidEndTime: '投标截止日期'
- }
- // 采购单位
- if (summary?.buyer) {
- result.buyers.push({
- name: summary.buyer
- })
- }
- const summaryItem = new SummaryItem(summaryMap, summary)
- // 特殊字段处理
- summaryItem.append('buyer', {
- type: 'unit'
- })
- summaryItem.append('buyerContactInfo', {
- type: 'contact'
- })
- const formatFn = (time) => {
- if (time) {
- return dateFormatter(time * 1000, 'yyyy-MM-dd')
- } else {
- return time
- }
- }
- summaryItem.append('signEndTime', {
- formatter: formatFn
- })
- summaryItem.append('bidEndTime', {
- formatter: formatFn
- })
- const list = summaryItem.createList()
- // 特殊字段处理
- // TODO 中标候选人公示时,需要特殊处理
- if (Array.isArray(summary?.winnerInfos)) {
- summary.winnerInfos.forEach((item) => {
- // 中标单位
- if (item?.winner) {
- result.winners.push({
- name: item?.winner,
- id: item?.winnerId
- })
- }
- list.push(
- summaryItem.customCreate({
- label: '中标单位',
- type: 'unit',
- expands: {
- value: item?.winner,
- id: item?.winnerId,
- _origin: item
- }
- })
- )
- list.push(
- summaryItem.customCreate({
- label: '中标联系人/电话',
- type: 'contact',
- expands: {
- value: item?.winnerContactInfo,
- id: item?.winnerId,
- _origin: item
- }
- })
- )
- })
- }
- // TODO 确认金额字段
- list.push(
- summaryItem.customCreate({
- label: '中标金额(元)',
- expands: {
- value: '测试金额'
- }
- })
- )
- result.list = list
- return result
- }
- tranSummaryOfProposed(summary) {
- const result = this.createModel()
- const summaryMap = {
- projectName: '项目名称',
- area: '省份',
- buyer: '业主单位',
- buyerClass: '业主类型',
- totalInvestment: '总投资',
- projectPeriod: '建设年限',
- address: '建设地点',
- approveDept: '审批机关',
- approveContent: '审批事项',
- approveCode: '审批代码',
- approvalNumber: '批准文号',
- approveTime: '审批时间',
- approveStatus: '审批结果',
- content: '建设内容'
- }
- // 采购单位
- if (summary?.buyer) {
- result.buyers.push({
- name: summary.buyer
- })
- }
- const summaryItem = new SummaryItem(summaryMap, summary)
- // 特殊字段处理
- summaryItem.append('address', {
- expands: {
- row: true
- }
- })
- summaryItem.append('content', {
- expands: {
- row: true
- }
- })
- summaryItem.append('totalInvestment', {
- formatter: formatMoney
- })
- result.list = summaryItem.createList()
- return result
- }
- }
- function useSummaryModel() {
- return new SummaryModel()
- }
- export default useSummaryModel
|