1、保养规范审批流程根据规范分类区分展示保养项明细
2、调整二保批量新增功能
| | |
| | | dataIndex: 'action', |
| | | align: 'center', |
| | | scopedSlots: { customRender: 'action' }, |
| | | width: 200, |
| | | fixed: 'right' |
| | | } |
| | | this.columns = [...this.columns, operationColumn] |
| | |
| | | <!-- 操作按钮区域 --> |
| | | <div class="table-operator" v-if="isDisplayOperation"> |
| | | <a-button v-has="'secondMaintenanceOrder:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> |
| | | <a-button v-has="'secondMaintenanceOrder:batchAdd'" @click="handleBatchAdd" type="primary" icon="plus">批量新增</a-button> |
| | | <a-button v-has="'secondMaintenanceOrder:batchAdd'" @click="handleBatchAdd" type="primary" icon="plus">批量新增 |
| | | </a-button> |
| | | <a-dropdown v-if="selectedRowKeys.length > 0"> |
| | | <a-menu slot="overlay"> |
| | | <a-menu-item v-has="'secondMaintenanceOrder:batchAbolish'" key="1" @click="handlerBatchAbolish"> |
| | |
| | | |
| | | <a-divider v-has="'secondMaintenanceOrder:edit'" type="vertical"/> |
| | | |
| | | <a-popconfirm v-has="'secondMaintenanceOrder:collect'" title="确定领取吗?" @confirm="() => handlerCollect(record.id)"> |
| | | <a-popconfirm v-has="'secondMaintenanceOrder:collect'" title="确定领取吗?" |
| | | @confirm="() => handlerCollect(record.id)"> |
| | | <a>领取</a> |
| | | </a-popconfirm> |
| | | |
| | |
| | | <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> |
| | | <a-menu slot="overlay"> |
| | | <a-menu-item> |
| | | <a-popconfirm v-has="'secondMaintenanceOrder:abolish'" title="确定作废吗?" @confirm="() => handlerAbolish(record.id)"> |
| | | <a-popconfirm v-has="'secondMaintenanceOrder:abolish'" title="确定作废吗?" |
| | | @confirm="() => handlerAbolish(record.id)"> |
| | | <a>作废</a> |
| | | </a-popconfirm> |
| | | </a-menu-item> |
| | |
| | | <a @click="handleDetail(record)">详情</a> |
| | | |
| | | |
| | | <a-divider v-has="'secondMaintenanceOrder:restore'" v-if="record.maintenanceStatus === 'ABOLISH'" type="vertical"/> |
| | | <a-divider v-has="'secondMaintenanceOrder:restore'" v-if="record.maintenanceStatus === 'ABOLISH'" |
| | | type="vertical"/> |
| | | |
| | | <a-popconfirm v-has="'secondMaintenanceOrder:restore'" v-if="record.maintenanceStatus === 'ABOLISH'" title="确定还原吗?" @confirm="() => handlerRestore(record.id)"> |
| | | <a-popconfirm v-has="'secondMaintenanceOrder:restore'" v-if="record.maintenanceStatus === 'ABOLISH'" |
| | | title="确定还原吗?" @confirm="() => handlerRestore(record.id)"> |
| | | <a>还原</a> |
| | | </a-popconfirm> |
| | | |
| | |
| | | methods: { |
| | | handleBatchAdd() { |
| | | this.$refs.batchModalForm.title = '批量新增' |
| | | this.$refs.batchModalForm.visible = true |
| | | this.$refs.batchModalForm.add() |
| | | }, |
| | | |
| | | /** |
| | |
| | | <template> |
| | | <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered |
| | | <j-modal :title="title" :visible="visible" :confirmLoading="confirmLoading" fullscreen |
| | | :mask-closable="false" @ok="handleOk" @cancel="handleCancel" cancelText="关闭"> |
| | | <a-spin :spinning="spinning"> |
| | | <j-vxe-table ref="editableDetailTable" rowNumber rowSelection bordered alwaysEdit toolbar |
| | | :toolbarConfig="detail.toolbarConfig" keep-source :height="500" |
| | | :dataSource="detail.dataSource" :columns="detail.columns"> |
| | | <!--统一编码--> |
| | | <template v-slot:equipmentId="props"> |
| | | <maintenance-equipment-select placeholder="请输入统一编码或名称搜索" v-model="props.row.equipmentId" |
| | | maintenanceCategory="SECOND_MAINTENANCE" :allowClear="false" |
| | | @autocompleteForm="autocompleteForm($event,props.row)"/> |
| | | </template> |
| | | <a-row :gutter="48"> |
| | | <a-col :span="6"> |
| | | <a-tabs default-active-key="1"> |
| | | <a-tab-pane tab="设备结构树" key="1"> |
| | | <a-tree showLine ref="tree" :expandedKeys.sync="expandedKeys" |
| | | :treeData="treeDataSource" checkable @check="onCheck" v-model="checkedKeys" |
| | | @expand="onExpand" @select="handleTreeNodeSelect"> |
| | | </a-tree> |
| | | </a-tab-pane> |
| | | </a-tabs> |
| | | </a-col> |
| | | |
| | | <a-col :span="18"> |
| | | <a-tabs default-active-key="1"> |
| | | <a-tab-pane tab="设备明细" key="1"> |
| | | <j-vxe-table ref="editableDetailTable" rowNumber rowSelection bordered alwaysEdit keep-source |
| | | :height="500" :dataSource="detail.dataSource" :columns="detail.columns" |
| | | @selectRowChange="handleTableSelectRowChange"> |
| | | <!-- 保养日期--> |
| | | <template v-slot:maintenanceDate="props"> |
| | | <a-date-picker v-model="props.row.maintenanceDate" value-format="YYYY-MM-DD" :allow-clear="false"/> |
| | |
| | | <a :disabled="!props.row.equipmentId" @click="handlePreviewDetail(props.row.standardId)">预览明细</a> |
| | | </template> |
| | | </j-vxe-table> |
| | | </a-tab-pane> |
| | | |
| | | <a-date-picker slot="tabBarExtraContent" type="primary" value-format="YYYY-MM-DD" :allowClear="false" |
| | | @change="handleBatchSetDate"/> |
| | | </a-tabs> |
| | | </a-col> |
| | | </a-row> |
| | | |
| | | </a-spin> |
| | | |
| | | <eam-second-maintenance-batch-order-detail-modal ref="detailModal"/> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { postAction } from '@/api/manage' |
| | | import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue' |
| | | import { getAction, postAction } from '@/api/manage' |
| | | import { JVXETypes } from '@comp/jeecg/JVxeTable' |
| | | import EamSecondMaintenanceBatchOrderDetailModal from './EamSecondMaintenanceBatchOrderDetailModal' |
| | | |
| | | export default { |
| | | name: 'EamSecondMaintenanceBatchOrderModal', |
| | | components: { EamSecondMaintenanceBatchOrderDetailModal, MaintenanceEquipmentSelect }, |
| | | components: { EamSecondMaintenanceBatchOrderDetailModal }, |
| | | data() { |
| | | return { |
| | | title: '操作', |
| | | visible: false, |
| | | confirmLoading: false, |
| | | spinning: false, |
| | | treeDataSource: [], |
| | | checkedKeys: [], |
| | | expandedKeys: [], |
| | | selectedKeys: [], |
| | | url: { |
| | | batchAdd: '/eam/secondMaintenanceOrder/batchAdd' |
| | | batchAdd: '/eam/secondMaintenanceOrder/batchAdd', |
| | | getDeviceTree: '/eam/secondMaintenanceOrder/BatchTreeStructure' |
| | | }, |
| | | detail: { |
| | | dataSource: [], |
| | | columns: [ |
| | | { |
| | | title: 'ID', |
| | | key: 'id', |
| | | type: JVXETypes.hidden |
| | | }, |
| | | { |
| | | title: '工单号', |
| | | key: 'orderNum', |
| | | align: 'center', |
| | | type: JVXETypes.inputNumber, |
| | | disabled: true, |
| | | placeholder: '${title}系统自动生成', |
| | | width: 200 |
| | | }, |
| | | { |
| | | title: '统一编码', |
| | | key: 'equipmentId', |
| | | key: 'equipmentCode', |
| | | align: 'center', |
| | | type: JVXETypes.slot, |
| | | slotName: 'equipmentId', |
| | | width: 300, |
| | | validateRules: [ |
| | | { required: true, message: '请输入${title}或名称搜索' }, |
| | | { unique: true, message: '${title}不能重复' } |
| | | ] |
| | | type: JVXETypes.normal, |
| | | width: 150 |
| | | }, |
| | | { |
| | | title: '规范名称', |
| | | key: 'standardName', |
| | | align: 'center', |
| | | type: JVXETypes.normal, |
| | | width: 200 |
| | | width: 300 |
| | | }, |
| | | { |
| | | title: '保养日期', |
| | |
| | | key: 'remark', |
| | | align: 'center', |
| | | type: JVXETypes.textarea, |
| | | placeholder: '请输入备注', |
| | | width: 300 |
| | | placeholder: '请输入备注' |
| | | }, |
| | | { |
| | | title: '操作', |
| | | align: 'center', |
| | | type: JVXETypes.slot, |
| | | width: 150, |
| | | slotName: 'action', |
| | | fixed: 'right' |
| | | slotName: 'action' |
| | | } |
| | | ], |
| | | toolbarConfig: { |
| | | // prefix 前缀;suffix 后缀 |
| | | slot: ['prefix', 'suffix'], |
| | | // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮 |
| | | btn: ['add', 'remove', 'clearSelection'] |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | add() { |
| | | //初始化默认值 |
| | | this.model = { maintenancePeriod: 6 } |
| | | this.visible = true |
| | | this.editable = true |
| | | this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = [] |
| | | this.checkedKeys = this.detail.dataSource = [] |
| | | this.queryTreeData() |
| | | }, |
| | | |
| | | // 获取设备结构树 |
| | | queryTreeData() { |
| | | this.spinning = true |
| | | this.treeDataSource = [] |
| | | getAction(this.url.getDeviceTree) |
| | | .then(res => { |
| | | if (res.success) { |
| | | this.allTreeKeys = [] |
| | | this.treeDataSource = res.result |
| | | this.generateList(this.treeDataSource) |
| | | this.expandedKeys = this.allTreeKeys |
| | | } else { |
| | | this.$notification.warning({ |
| | | message: '消息', |
| | | description: res.message |
| | | }) |
| | | } |
| | | }) |
| | | .finally(() => { |
| | | this.spinning = false |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * 预览设备规范明细 |
| | | * @param standardId |
| | | */ |
| | | handlePreviewDetail(standardId) { |
| | | this.$refs.detailModal.visible = true |
| | | this.$refs.detailModal.loadStandardDetail(standardId) |
| | | }, |
| | | |
| | | autocompleteForm(selectObj, record) { |
| | | this.$set(record, 'standardName', selectObj.standardName) |
| | | this.$set(record, 'standardId', selectObj.id) |
| | | this.$set(record, 'equipmentId', selectObj.equipmentId) |
| | | this.$set(record, 'maintenancePeriod', selectObj.maintenancePeriod) |
| | | this.$refs.editableDetailTable.validateTable() |
| | | onExpand(expandedKeys) { |
| | | this.expandedKeys = expandedKeys |
| | | this.autoExpandParent = false |
| | | }, |
| | | |
| | | async onCheck(value, obj) { |
| | | this.$refs.editableDetailTable.clearValidate() |
| | | this.checkedKeys = value |
| | | const childNodesList = obj.checkedNodes.filter(item => item.data.props.equipmentId).map(item => { |
| | | return { |
| | | ...item.data.props.dataRef, |
| | | id: item.data.props.dataRef.key, |
| | | equipmentId: item.data.props.dataRef.key, |
| | | equipmentCode: item.data.props.dataRef.equipmentId, |
| | | standardId: item.data.props.dataRef.maintenanceStandardId, |
| | | standardName: item.data.props.dataRef.maintenanceStandardName, |
| | | maintenancePeriod: 6 |
| | | } |
| | | }) |
| | | |
| | | if (childNodesList.length === 0) { |
| | | this.detail.dataSource = [] |
| | | return |
| | | } |
| | | console.log('childNodesList', childNodesList) |
| | | |
| | | if (childNodesList.length > this.detail.dataSource.length) { |
| | | childNodesList.forEach(childNode => { |
| | | if (!(this.detail.dataSource.map(item => item.id).includes(childNode.id))) this.detail.dataSource.push(childNode) |
| | | }) |
| | | console.log('detail+++++++++++', this.detail.dataSource) |
| | | } else { |
| | | const deleteList = [] |
| | | this.detail.dataSource.map(item => item.id).forEach(item => { |
| | | if (!(childNodesList.map(childNode => childNode.id).includes(item))) deleteList.push(item) |
| | | }) |
| | | |
| | | deleteList.forEach(deleteItem => { |
| | | this.detail.dataSource.splice(this.detail.dataSource.findIndex(item => item.id === deleteItem), 1) |
| | | }) |
| | | |
| | | console.log('deleteList', deleteList) |
| | | console.log('detail----------', this.detail.dataSource) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * 点击树节点时触发 |
| | | * @param selectedKeys |
| | | * @param event |
| | | */ |
| | | handleTreeNodeSelect(selectedKeys, event) { |
| | | event.node.$el.childNodes[1].click() |
| | | }, |
| | | |
| | | /** |
| | | * 递归树数据展开所有节点 |
| | | * @param data |
| | | */ |
| | | generateList(data) { |
| | | for (let i = 0; i < data.length; i++) { |
| | | const node = data[i] |
| | | const key = node.key |
| | | this.allTreeKeys.push(key) |
| | | if (node.children) { |
| | | this.generateList(node.children) |
| | | } |
| | | } |
| | | }, |
| | | |
| | | handleBatchSetDate(value) { |
| | | this.detail.dataSource.forEach((item, index, self) => { |
| | | if (this.selectedKeys.includes(item.id)) this.$set(item, 'maintenanceDate', value) |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * 表格多选框发生改变时触发 |
| | | * @param {selectedRowIds} 表格中已选择的ID列表 |
| | | */ |
| | | handleTableSelectRowChange({ selectedRowIds }) { |
| | | this.selectedKeys = selectedRowIds |
| | | console.log('selectedKeys', this.selectedKeys) |
| | | }, |
| | | |
| | | async handleOk() { |
| | |
| | | </a-col> |
| | | |
| | | <a-col :span="10" class="scroll-col"> |
| | | <a-tabs default-active-key="1"> |
| | | <a-tab-pane key="1" tab="保养项明细"> |
| | | <j-vxe-table ref="editableDetailTable" bordered alwaysEdit keep-source :dataSource="detail.dataSource" |
| | | <a-tabs v-model="activeTabKey"> |
| | | <template v-if="model.maintenanceCategory==='POINT_INSPECTION'"> |
| | | <a-tab-pane key="1" tab="日点检"> |
| | | <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1" |
| | | :columns="detail.columns"> |
| | | <template v-slot:itemCategory="props"> |
| | | <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> |
| | |
| | | </j-vxe-table> |
| | | </a-tab-pane> |
| | | |
| | | <a-tab-pane key="2" tab="周点检"> |
| | | <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource2" |
| | | :columns="detail.columns"> |
| | | <template v-slot:itemCategory="props"> |
| | | <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> |
| | | </template> |
| | | </j-vxe-table> |
| | | </a-tab-pane> |
| | | </template> |
| | | |
| | | <template v-if="model.maintenanceCategory==='SECOND_MAINTENANCE'"> |
| | | <a-tab-pane key="1" tab="操作工"> |
| | | <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1" |
| | | :columns="detail.columns"> |
| | | <template v-slot:itemCategory="props"> |
| | | <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> |
| | | </template> |
| | | </j-vxe-table> |
| | | </a-tab-pane> |
| | | |
| | | <a-tab-pane key="2" tab="维修工"> |
| | | <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource2" |
| | | :columns="detail.columns"> |
| | | <template v-slot:itemCategory="props"> |
| | | <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> |
| | | </template> |
| | | </j-vxe-table> |
| | | </a-tab-pane> |
| | | </template> |
| | | |
| | | <template v-if="model.maintenanceCategory==='THIRD_MAINTENANCE'"> |
| | | <a-tab-pane key="1" tab="三保"> |
| | | <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1" |
| | | :columns="detail.columns"> |
| | | <template v-slot:itemCategory="props"> |
| | | <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> |
| | | </template> |
| | | </j-vxe-table> |
| | | </a-tab-pane> |
| | | </template> |
| | | |
| | | <template v-if="selectShenpiData.processDefinitionKey"> |
| | | <a-tab-pane key='2' tab='流程图'> |
| | | <a-tab-pane key='3' tab='流程图'> |
| | | <img :src="imageSrc" alt="Fetched Image"/> |
| | | </a-tab-pane> |
| | | </template> |
| | | |
| | | <a-tab-pane key='3' tab='流转节点'> |
| | | <a-tab-pane key='4' tab='流转节点'> |
| | | <a-card> |
| | | <a-timeline style="padding:0 1% 0 12%" > |
| | | <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1"> |
| | |
| | | sm: { span: 16 } |
| | | }, |
| | | visible: false, |
| | | activeTabKey: '1', |
| | | // 表头 |
| | | url: { |
| | | diagramView: '/assign/flow/diagramView', |
| | |
| | | detailList: '/eam/eamMaintenanceStandardDetail/queryList' |
| | | }, |
| | | detail: { |
| | | dataSource: [], |
| | | dataSource1: [], |
| | | dataSource2: [], |
| | | columns: [], |
| | | inspectionColumns: [ |
| | | { |
| | |
| | | title: '项目序号', |
| | | key: 'itemCode', |
| | | type: JVXETypes.normal, |
| | | align: 'center' |
| | | }, |
| | | { |
| | | title: '保养项分类', |
| | | key: 'itemCategory', |
| | | type: JVXETypes.slot, |
| | | slotName: 'itemCategory', |
| | | align: 'center', |
| | | disabled: true |
| | | width: 100 |
| | | }, |
| | | // { |
| | | // title: '保养项分类', |
| | | // key: 'itemCategory', |
| | | // type: JVXETypes.slot, |
| | | // slotName: 'itemCategory', |
| | | // align: 'center', |
| | | // disabled: true |
| | | // }, |
| | | { |
| | | title: '保养项目', |
| | | key: 'itemName', |
| | |
| | | title: '项目序号', |
| | | key: 'itemCode', |
| | | type: JVXETypes.normal, |
| | | align: 'center' |
| | | }, |
| | | { |
| | | title: '保养项分类', |
| | | key: 'itemCategory', |
| | | type: JVXETypes.slot, |
| | | slotName: 'itemCategory', |
| | | align: 'center', |
| | | disabled: true |
| | | width: 100 |
| | | }, |
| | | // { |
| | | // title: '保养项分类', |
| | | // key: 'itemCategory', |
| | | // type: JVXETypes.slot, |
| | | // slotName: 'itemCategory', |
| | | // align: 'center', |
| | | // disabled: true |
| | | // }, |
| | | { |
| | | title: '保养项目', |
| | | key: 'itemName', |
| | |
| | | * @param record 主页面列表行记录 |
| | | */ |
| | | handleApprove(record) { |
| | | this.activeTabKey = '1' |
| | | this.getBasicInformationByApi(record) |
| | | this.getFlowChartImageByApi(record) |
| | | this.getFlowTaskListByApi(record) |
| | |
| | | * @param record |
| | | */ |
| | | getFlowTaskListByApi(record) { |
| | | console.log("sss",record) |
| | | let parmhis={ |
| | | 'procInstId': record.procInstId |
| | | } |
| | | getAction(this.url.queryHisTaskList,parmhis).then(res=>{ |
| | | this.hitaskDataSource=res.result |
| | | }).finally( |
| | | this.visible = true, |
| | | console.log('this.approveData---->', this.approveData) |
| | | this.visible = true |
| | | ) |
| | | }, |
| | | |
| | |
| | | * @param record 主页面列表行记录 |
| | | */ |
| | | handleDetail(record) { |
| | | this.detail.dataSource = [] |
| | | this.activeTabKey = '1' |
| | | this.detail.dataSource1 = this.detail.dataSource2 = [] |
| | | this.model = Object.assign({}, record) |
| | | this.getFlowTaskListByApi(record) |
| | | this.loadDetail(record.id) |
| | |
| | | getBasicInformationByApi(record) { |
| | | this.spinning = true |
| | | this.model = {} |
| | | this.detail.dataSource = [] |
| | | this.detail.dataSource1 = this.detail.dataSource2 = [] |
| | | const that = this |
| | | getAction(this.url.queryById, { id: record.dataId }) |
| | | .then(res => { |
| | |
| | | * @param dataId 业务ID |
| | | */ |
| | | loadDetail(dataId) { |
| | | this.spinning = true |
| | | getAction(this.url.detailList, { standardId: dataId }) |
| | | .then(res => { |
| | | if (res.success) this.detail.dataSource = res.result |
| | | if (res.success) { |
| | | switch (this.model.maintenanceCategory) { |
| | | case 'POINT_INSPECTION': |
| | | this.detail.dataSource1 = res.result.filter(item => item.itemCategory === 'DAY_INSPECTION') |
| | | this.detail.dataSource2 = res.result.filter(item => item.itemCategory === 'WEEK_INSPECTION') |
| | | break |
| | | case 'SECOND_MAINTENANCE': |
| | | this.detail.dataSource1 = res.result.filter(item => item.itemCategory === 'OPERATOR_MAINTENANCE') |
| | | this.detail.dataSource2 = res.result.filter(item => item.itemCategory === 'REPAIRER_MAINTENANCE') |
| | | break |
| | | case 'THIRD_MAINTENANCE': |
| | | this.detail.dataSource1 = res.result |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | } |
| | | }) |
| | | .finally(() => { |
| | | this.spinning = false |
| | |
| | | }, |
| | | |
| | | async submitForm() { |
| | | let errMap = await this.$refs.editableDetailTable.validateTable() |
| | | if (errMap) { |
| | | return |
| | | } |
| | | |
| | | this.$refs.form.validate(valid => { |
| | | if (valid) { |
| | | this.confirmLoading = this.spinning = true |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* 全局禁选样式 - 作用于整个页面 */ |
| | | html.submitting, |
| | | html.submitting body { |
| | |
| | | background-color: rgba(0, 0, 0, 0.1); /* 使用 RGBA 颜色,并设置较低的透明度 */ |
| | | margin: 20px 0; /* 分界线上下的外边距 */ |
| | | } |
| | | |
| | | .btn-custom { |
| | | background-color: #4CAF50; /* 绿色背景 */ |
| | | color: white; /* 白色文字 */ |
| | |
| | | font-weight: bold; |
| | | font-size: 20px; /* 或你需要的任何大小 */ |
| | | } |
| | | |
| | | .left_qiu{ |
| | | position: absolute; |
| | | left: -74px; |
| | |
| | | background: #0099ff; |
| | | transform: translate(0, 0); |
| | | } |
| | | |
| | | /deep/ .ant-timeline-item-tail{ |
| | | left: -29px !important; |
| | | } |
| | | |
| | | .left_qiu span{ |
| | | width: 3em; |
| | | display: block; |
| | | color: #fff; |
| | | text-align: center; |
| | | } |
| | | |
| | | .img{ |
| | | width: 75%; |
| | | } |
| | |
| | | border: 1px solid #ccc; |
| | | /* background-color: aqua; */ |
| | | } |
| | | |
| | | .box{ |
| | | width:21%; |
| | | height:50px; |