excelpagesChange

This commit is contained in:
shijing 2023-02-24 09:29:30 +08:00
parent d81dccac01
commit c501664bc9
12 changed files with 1408 additions and 88 deletions

View File

@ -163,6 +163,12 @@ export const asyncRoutes = [
name: 'productprocess',
component: () => import('@/views/mtm/productprocess'),
meta: { title: '产品管理', icon: 'product', perms: ['mtm_productprocess'] }
},
{
path: 'knowledgeBase',
name: 'knowledgeBase',
component: () => import('@/views/mtm/knowledgeBase'),
meta: { title: '知识库', icon: 'procedure', perms: ['mtm_process'] }
}
]
@ -291,61 +297,61 @@ export const asyncRoutes = [
name: 'record',
component: () => import('@/views/em/record'),
meta: { title: '校准检定记录', icon: 'calibrationRecord', perms: ['em_record'] }
},
{
path: 'maintenance',
name: 'maintenance',
component: () => import('@/views/em/maintenance'),
meta: { title: '设备维修', icon: 'calibrationRecord', perms: ['em_record'] }
}
]
},
// {
// path: '/safeEnviro',
// component: Layout,
// redirect: '/safeEnviro/hiddenDanger',
// name: 'safeEnviro',
// meta: { title: '安环管理', icon: 'equipment', perms: ['employee_manage'] },
// children: [
// {
// path: 'hiddenDanger',
// name: 'hiddenDanger',
// component: () => import('@/views/safeEnviro/hiddenDanger'),
// meta: { title: '隐患排查', icon: 'equipment', perms: ['employee_manage'] }
// },
// {
// path: 'riskControl',
// name: 'riskControl',
// component: () => import('@/views/safeEnviro/riskControl'),
// meta: { title: '风险管控', icon: 'equipment', perms: ['employee_manage'] }
// },
// {
// path: 'Education',
// name: 'Education',
// component: () => import('@/views/safeEnviro/Education'),
// meta: { title: '教育培训', icon: 'equipment', perms: ['employee_manage'] }
// } ,
// {
// path: 'environmetManage',
// name: 'environmetManage',
// component: () => import('@/views/safeEnviro/environmetManage'),
// meta: { title: '环境管理', icon: 'equipment', perms: ['employee_manage'] }
// } ,
// {
// path: 'intelligentAlarm',
// name: 'intelligentAlarm',
// component: () => import('@/views/safeEnviro/intelligentAlarm'),
// meta: { title: '智能报警', icon: 'equipment', perms: ['employee_manage'] }
// }
// ]
// },
{
path: '/safeEnviro',
component: Layout,
redirect: '/safeEnviro/hiddenDanger',
name: 'safeEnviro',
meta: { title: '安环管理', icon: 'equipment', perms: ['employee_manage'] },
children: [
{
path: 'hiddenDanger',
name: 'hiddenDanger',
component: () => import('@/views/safeEnviro/hiddenDanger'),
meta: { title: '隐患排查', icon: 'equipment', perms: ['employee_manage'] }
},
{
path: 'riskControl',
name: 'riskControl',
component: () => import('@/views/safeEnviro/riskControl'),
meta: { title: '风险管控', icon: 'equipment', perms: ['employee_manage'] }
},
{
path: 'Education',
name: 'Education',
component: () => import('@/views/safeEnviro/Education'),
meta: { title: '教育培训', icon: 'equipment', perms: ['employee_manage'] }
} ,
{
path: 'environmetManage',
name: 'environmetManage',
component: () => import('@/views/safeEnviro/environmetManage'),
meta: { title: '环境管理', icon: 'equipment', perms: ['employee_manage'] }
} ,
{
path: 'intelligentAlarm',
name: 'intelligentAlarm',
component: () => import('@/views/safeEnviro/intelligentAlarm'),
meta: { title: '智能报警', icon: 'equipment', perms: ['employee_manage'] }
}
]
},
{
path: '/sam',
component: Layout,
redirect: '/sam/customer',
redirect: '/sam/contract',
name: 'sam',
meta: { title: '销售管理', icon: 'sale', perms: ['sam_manage'] },
children: [
{
path: 'customer',
name: 'customer',
component: () => import('@/views/sam/customer'),
meta: { title: '客户管理', icon: 'customer', perms: ['sam_customer'] }
},
{
path: 'contract',
name: 'contract',
@ -360,7 +366,6 @@ export const asyncRoutes = [
meta: { title: '合同详情'},
hidden: true
}
,
{
path: 'order',
@ -393,6 +398,27 @@ export const asyncRoutes = [
}
]
},
{
path: '/customerManage',
component: Layout,
redirect: '/customerManage/customer',
name: 'customerManage',
meta: { title: '客户管理', icon: 'materialStatistics' },
children: [
{
path: 'customer',
name: 'customer',
component: () => import('@/views/customerManage/customer'),
meta: { title: '客户信息', icon: 'materialStatistics'}
},
{
path: 'feedback',
name: 'feedback',
component: () => import('@/views/customerManage/feedback'),
meta: { title: '客户反馈', icon: 'materialStatistics'}
},
]
},
{
path: '/qm',
component: Layout,
@ -459,21 +485,21 @@ export const asyncRoutes = [
]
},
// {
// path: '/energyManage',
// component: Layout,
// redirect: '/energyManage/energy',
// name: 'energyManage',
// meta: { title: '能源管理', icon: 'materialStatistics' },
// children: [
// {
// path: 'energy',
// name: 'energy',
// component: () => import('@/views/energyManage/energy'),
// meta: { title: '能源统计', icon: 'materialStatistics'}
// },
// ]
// },
{
path: '/energyManage',
component: Layout,
redirect: '/energyManage/energy',
name: 'energyManage',
meta: { title: '能源管理', icon: 'materialStatistics' },
children: [
{
path: 'energy',
name: 'energy',
component: () => import('@/views/energyManage/energy'),
meta: { title: '能源统计', icon: 'materialStatistics'}
},
]
},
{
path: '/personnel',
component: Layout,
@ -554,6 +580,12 @@ export const asyncRoutes = [
component: () => import('@/views/inm/product'),
meta: { title: '成品库', icon: 'finishedProduct', perms: ['inm_product'] }
},
{
path: 'logistics',
name: 'logistics',
component: () => import('@/views/inm/logistics'),
meta: { title: '物流信息', icon: 'finishedProduct', perms: ['inm_product'] }
},
]
},
@ -570,6 +602,13 @@ export const asyncRoutes = [
component: () => import('@/views/procurement/vendor'),
meta: { title: '供应商', icon: 'supplier', perms: ['pum_vendor'] }
},
{
path: 'vendorDetails/:id',
name: 'vendorDetails',
component: () => import('@/views/procurement/vendorDetails'),
meta: { title: '供应商详情页'},
hidden: true
},
{
path: 'puorder',
name: 'puorder',
@ -610,6 +649,12 @@ export const asyncRoutes = [
component: () => import('@/views/statistics/personStatistics'),
meta: { title: '人员统计', icon: 'personStatistics', perms: ['statistics_personStatistics'] }
},
{
path: 'sales',
name: 'sales',
component: () => import('@/views/statistics/sales'),
meta: { title: '销售统计', icon: 'personStatistics', perms: ['statistics_personStatistics'] }
},
/* {
path: 'costStatistics',
name: 'costStatistics',

View File

@ -47,17 +47,17 @@
v-el-height-adaptive-table="{bottomOffset: 42}"
>
<el-table-column type="index" width="50"/>
<el-table-column label="客户名称" prop="name" width="200" show-overflow-tooltip>
<el-table-column label="客户名称" prop="name" min-width="200" show-overflow-tooltip>
</el-table-column>
<el-table-column label="详细地址" prop="address" width="200" show-overflow-tooltip>
<el-table-column label="详细地址" prop="address" min-width="200" show-overflow-tooltip>
</el-table-column>
<el-table-column label="联系人" prop="contact" width="130" show-overflow-tooltip>
<el-table-column label="联系人" prop="contact" min-width="130" show-overflow-tooltip>
</el-table-column>
<el-table-column label="联系电话" prop="contact_phone" width="130" show-overflow-tooltip>
<el-table-column label="联系电话" prop="contact_phone" min-width="130" show-overflow-tooltip>
</el-table-column>
<el-table-column label="描述" prop="description" width="200" show-overflow-tooltip>
<el-table-column label="描述" prop="description" min-width="200" show-overflow-tooltip>
</el-table-column>
<el-table-column label="创建时间" prop="create_time" width="160">
<el-table-column label="创建时间" prop="create_time" min-width="160">
</el-table-column>
<el-table-column
align="center"

View File

@ -0,0 +1,205 @@
<template>
<div class="app-container">
<el-card>
<div>
<el-button
v-if="checkPermission(['equipment_create'])"
type="primary"
icon="el-icon-plus"
>
新增
</el-button>
<el-input
v-model="listQuery.search"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter"
>
搜索
</el-button>
</div>
</el-card>
<el-card shadow="false">
<el-table
v-loading="listLoading"
:data="tableData.results"
border
fit
stripe
highlight-current-row
height="100"
v-el-height-adaptive-table="{bottomOffset: 42}"
>
<el-table-column label="序号" type="index" width="80"/>
<el-table-column label="客户名称" prop="name" min-width="120">
</el-table-column>
<el-table-column label="问题类型" prop="type" min-width="120">
</el-table-column>
<el-table-column label="问题描述" prop="indur" min-width="120" show-overflow-tooltip>
</el-table-column>
<el-table-column label="产品名称" prop="pname" min-width="120" show-overflow-tooltip>
</el-table-column>
<el-table-column label="产品型号" prop="ptype" min-width="120">
</el-table-column>
<el-table-column label="订单号" prop="order" min-width="120">
</el-table-column>
<el-table-column label="联系人" prop="contacts" min-width="120">
</el-table-column>
<el-table-column label="联系电话" prop="phone" min-width="120">
</el-table-column>
<el-table-column label="状态" prop="status" min-width="120">
</el-table-column>
<el-table-column
align="center"
label="操作"
min-width="120px"
fixed="right"
>
<template slot-scope="scope">
<el-link type="primary"> 编辑</el-link>
<el-link type="danger">处理</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="tableData.count > 0"
:total="tableData.count"
:page.sync="listQuery.page"
:limit.sync="listQuery.page_size"
@pagination="getList"
/>
</el-card>
</div>
</template>
<script>
import {getpEquipmentList} from "@/api/equipment";
import {getUserList} from "@/api/user";
import {getOrgList} from "@/api/org";
import checkPermission from "@/utils/permission";
import {genTree} from "@/utils";
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
const defaultequipment = {
name: "",
number: "",
};
export default {
components: {Pagination},
data() {
return {
equipment: defaultequipment,
tableData: {
count: 7,
results:[
{name:'客户1',type:'外观缺陷',indur:'有一块玻璃规格不符',pname:'成品A',ptype:'12.3',order:'F20220630A02',contacts:'胡斯',phone:'131****2016',status:'未处理'},
{name:'客户2',type:'强度',indur:'玻璃强度不达标',pname:'成品B',ptype:'12.4',order:'F20220630B03',contacts:'李曼',phone:'132****5623',status:'已处理'},
{name:'客户3',type:'耐磨性',indur:'耐磨性不够好',pname:'成品C',ptype:'12.1',order:'F20220630C04',contacts:'张远',phone:'131****2561',status:'已处理'},
{name:'客户4',type:'耐碱性',indur:'耐碱性没有达到预期值',pname:'成品B',ptype:'12.3',order:'F20220630B02',contacts:'孙芳',phone:'133****0596',status:'已处理'},
{name:'客户5',type:'耐辐照',indur:'耐辐照指数不达标',pname:'成品C',ptype:'12.2',order:'F20220630C01',contacts:'白丽',phone:'131****2123',status:'已处理'},
{name:'客户6',type:'外观缺陷',indur:'边角弧度大0.5°',pname:'成品A',ptype:'12.4',order:'F20220630A01',contacts:'刘俊',phone:'131****2401',status:'已处理'},
{name:'客户7',type:'强度',indur:'玻璃强度过硬',pname:'成品B',ptype:'12.3',order:'F20220630B01',contacts:'赵磊',phone:'135****6238',status:'已处理'}
],
},
listQuery: {
page: 1,
page_size: 20,
},
keeperOptions: [],
depOptions: [],
listLoading: true,
};
},
computed: {},
watch: {},
created() {
this.getList();
this.getUserList();
this.getOrgList();
},
methods: {
checkPermission,
//设备列表
getList() {
this.listLoading = true;
this.listQuery.type = 1;
getpEquipmentList(this.listQuery).then((response) => {
if (response.data) {
this.equipmentList = response.data;
}
this.listLoading = false;
});
},
//组员列表
getUserList() {
getUserList({pageoff: true}).then((res) => {
this.keeperOptions = genTree(res.data);
});
},
//部门列表
getOrgList() {
getOrgList({pageoff: true}).then((res) => {
this.depOptions = genTree(res.data);
});
},
handleFilter() {
this.listQuery.page = 1;
this.getList();
},
resetFilter() {
this.listQuery = {
page: 1,
page_size: 20,
}
this.getList();
},
handleCreate() {
this.equipment = Object.assign({}, defaultequipment);
this.dialogType = "new";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["Form"].clearValidate();
});
},
handleEdit(scope) {
this.equipment = Object.assign({}, scope.row); // copy obj
this.dialogType = "edit";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["Form"].clearValidate();
});
},
handleDelete(scope) {
this.$confirm("确认删除?", "警告", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "error",
})
.then(async () => {
//
})
.catch((err) => {
this.$message.error(err);
});
},
},
};
</script>

View File

@ -0,0 +1,254 @@
<template>
<div class="app-container">
<el-card>
<div>
<el-button
v-if="checkPermission(['equipment_create'])"
type="primary"
icon="el-icon-plus"
>
新增
</el-button>
<el-select
v-model="timeType"
placeholder="设备名称"
clearable
style="width: 120px"
class="filter-item"
@change="handleFilter"
>
<el-option
v-for="item in timeOption"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<el-select
v-model="timeType"
placeholder="维修策略"
clearable
style="width: 120px"
class="filter-item"
@change="handleFilter"
>
<el-option
v-for="item in timeOption"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<el-select
v-model="timeType"
placeholder="故障类型"
clearable
style="width: 120px"
class="filter-item"
@change="handleFilter"
>
<el-option
v-for="item in timeOption"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<el-input
v-model="listQuery.search"
placeholder="报停单号"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter"
>
搜索
</el-button>
</div>
</el-card>
<el-card shadow="false">
<el-table
v-loading="listLoading"
:data="tableData.results"
border
fit
stripe
highlight-current-row
height="100"
v-el-height-adaptive-table="{bottomOffset: 42}"
>
<el-table-column label="序号" type="index" width="80"/>
<el-table-column label="报停编号" prop="number" min-width="120">
</el-table-column>
<el-table-column label="维修策略" prop="tactics" min-width="120">
</el-table-column>
<el-table-column label="设备名称" prop="name" min-width="120" show-overflow-tooltip>
</el-table-column>
<el-table-column label="故障类型" prop="type" min-width="120" show-overflow-tooltip>
</el-table-column>
<el-table-column label="故障分析" prop="analyse" min-width="120">
</el-table-column>
<el-table-column label="录入人" prop="creater" min-width="120">
</el-table-column>
<el-table-column
align="center"
label="操作"
min-width="120px"
fixed="right"
>
<template slot-scope="scope">
<el-link type="primary">编辑</el-link>
<el-link type="danger">删除</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="tableData.count > 0"
:total="tableData.count"
:page.sync="listQuery.page"
:limit.sync="listQuery.page_size"
@pagination="getList"
/>
</el-card>
</div>
</template>
<script>
import {getpEquipmentList, createEquipment, updateEquipment, deleteEquipment} from "@/api/equipment";
import {getUserList} from "@/api/user";
import {getOrgList} from "@/api/org";
import checkPermission from "@/utils/permission";
import {genTree} from "@/utils";
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
const defaultequipment = {
name: "",
number: "",
};
export default {
components: {Pagination},
data() {
return {
equipment: defaultequipment,
tableData: {
count: 5,
results:[
{number:'RO2021030104588034',tactics:'内部维修',name:'底中框生产线',type:'机械故障',analyse:'油缸密封圈损坏',creater:'陈帅'},
{number:'RO2021030104574919',tactics:'内部维修',name:'剪板机-4000',type:'机械故障',analyse:'氮气缸气压过低',creater:'陈帅'},
{number:'RO2021030104554096',tactics:'内部维修',name:'光纤激光机2',type:'机械故障',analyse:'系统重新设定',creater:'陈帅'},
{number:'RO2021030104501203',tactics:'内部维修',name:'底中框生产线',type:'机械故障',analyse:'换向阀密封圈损坏',creater:'陈帅'},
{number:'RO2021030104594101',tactics:'内部维修',name:'过道生产线',type:'机械故障',analyse:'冲孔摸具故障',creater:'陈帅'},
]
},
listQuery: {
page: 1,
page_size: 20,
},
keeperOptions: [],
depOptions: [],
listLoading: true,
dialogVisible: false,
dialogType: "new",
rule1: {
name: [{required: true, message: "请输入", trigger: "blur"}],
number: [{required: true, message: "请输入", trigger: "blur"}],
type: [{required: true, message: "请输入", trigger: "blur"}],
model: [{required: true, message: "请输入", trigger: "blur"}],
state: [{required: true, message: "请选择", trigger: "blur"}],
belong_dept: [{required: true, message: "请选择", trigger: "blur"}]
},
};
},
computed: {},
watch: {},
created() {
this.getList();
this.getUserList();
this.getOrgList();
},
methods: {
checkPermission,
//设备列表
getList() {
this.listLoading = true;
this.listQuery.type = 1;
getpEquipmentList(this.listQuery).then((response) => {
if (response.data) {
this.equipmentList = response.data;
}
this.listLoading = false;
});
},
//组员列表
getUserList() {
getUserList({pageoff: true}).then((res) => {
this.keeperOptions = genTree(res.data);
});
},
//部门列表
getOrgList() {
getOrgList({pageoff: true}).then((res) => {
this.depOptions = genTree(res.data);
});
},
handleFilter() {
this.listQuery.page = 1;
this.getList();
},
resetFilter() {
this.listQuery = {
page: 1,
page_size: 20,
}
this.getList();
},
handleCreate() {
this.equipment = Object.assign({}, defaultequipment);
this.dialogType = "new";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["Form"].clearValidate();
});
},
handleEdit(scope) {
this.equipment = Object.assign({}, scope.row); // copy obj
this.dialogType = "edit";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["Form"].clearValidate();
});
},
handleDelete(scope) {
this.$confirm("确认删除?", "警告", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "error",
})
.then(async () => {
//
})
.catch((err) => {
this.$message.error(err);
});
},
},
};
</script>

View File

@ -77,7 +77,7 @@
:height="domHeight"
></Echart>
</div>
</el-col>
</el-col>
</el-row>
<el-row :gutter="20" v-else>
<el-col :span="12">
@ -105,7 +105,7 @@
</el-col>
</el-row>
<el-row :gutter="5" style="margin-top: 5px;">
<el-col style="border:1px solid #cccccc;border-radius: 10px;">
<el-col v-if="showType=='全厂'" style="border:1px solid #cccccc;border-radius: 10px;">
<!-- <el-table
small
v-loading="orderLoading"
@ -134,7 +134,7 @@
<template slot-scope="scope">{{ scope.row.delivery_date }}</template>
</el-table-column>
</el-table> -->
<table class="tableData">
<table class="tableData" :style="{height: domHeight}">
<th class="tableTh">
<td class="thtd" v-for="item in thLists">{{ item }}</td>
</th>
@ -143,6 +143,16 @@
</tr>
</table>
</el-col>
<el-col v-else style="border:1px solid #cccccc;border-radius: 10px;">
<table class="tableData" :style="{height: domHeight}">
<th class="tableTh">
<td class="thtd" v-for="item in thLists1">{{ item }}</td>
</th>
<tr class="tableTr" v-for="itemtr in trList1">
<td class="trtd" v-for="itemtd in itemtr">{{ itemtd }}</td>
</tr>
</table>
</el-col>
</el-row>
</div>
</template>
@ -192,6 +202,17 @@
['动力','1573','360','919','189','410','187','741'],
],
thLists1:['工序','电耗','消耗单位','产量','单位消耗'],
trList1:[
['冷加工','589','kwh','260','2.27'],
['热弯','736','kwh','260','2.83'],
['化学钢化','706','kwh','100','7.06'],
['物理钢化','10362','kwh','160','64.76'],
['镀膜','736','kwh','260','2.83'],
['夹层','340','kwh','130','2.62'],
['包边','360','kwh','120','3.00'],
['装框','235','kwh','100','2.35'],
],
cdata: {
xData: ["办公用电", "照明", "空调", "动力"],
seriesData: [
@ -309,23 +330,13 @@
immediate: true,
deep: true
},
methods: {
handleFilter(){
},
getList() {
this.orderLoading = true;
getOrderList(this.orderQuery).then((response) => {
if (response.data) {
this.orderList = response.data;
}
this.orderLoading = false;
});
},
created(){
// let hei = document.getElementsByClassName('app-main')[0].clientHeight;
// this.domHeight =( hei- 100)/2+'px';
},
mounted() {
let hei = document.getElementsByClassName('app-main')[0].clientHeight;
this.domHeight =( hei- 60)/2+'px';
this.domHeight =( hei- 100)/2+'px';
this.getList();
//全场
this.barOptions ={
@ -458,8 +469,22 @@
},
}]
}
}
},
methods: {
handleFilter(){
},
getList() {
this.orderLoading = true;
getOrderList(this.orderQuery).then((response) => {
if (response.data) {
this.orderList = response.data;
}
this.orderLoading = false;
});
},
},
}
</script>
@ -504,6 +529,7 @@
.tableTr{
width: 100%;
display: flex;
border-bottom:1px solid #cccccc;
}
.trtd{
flex: 1;

View File

@ -0,0 +1,124 @@
<template>
<div class="app-container">
<el-card>
<div>
<el-button
type="primary"
icon="el-icon-plus"
>
新增
</el-button>
<el-input
v-model="listQuery.search"
placeholder="编号"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
>
查询
</el-button>
</div>
</el-card>
<el-card>
<el-table
v-loading="listLoading"
:data="tableData.results"
border
fit
stripe
highlight-current-row
height="100"
v-el-height-adaptive-table="{bottomOffset: 42}"
>
<el-table-column type="index" width="50"/>
<el-table-column label="单号" prop="order">
</el-table-column>
<el-table-column label="物品名称" prop="name">
</el-table-column>
<el-table-column label="数量" prop="number">
</el-table-column>
<el-table-column label="注意事项" prop="attention">
</el-table-column>
<el-table-column label="下单人" prop="payer">
</el-table-column>
<el-table-column label="姓名" prop="payName">
</el-table-column>
<el-table-column label="联系方式" prop="phone">
</el-table-column>
<el-table-column label="发货地址" prop="fromPlace">
</el-table-column>
<el-table-column label="收货人" prop="receiver">
</el-table-column>
<el-table-column label="收货人姓名" prop="receiverName">
</el-table-column>
<el-table-column label="收货人手机" prop="receiverPhone">
</el-table-column>
<el-table-column label="收货人地址" prop="toPlace">
</el-table-column>
<el-table-column label="车牌号" prop="carNumber">
</el-table-column>
<el-table-column label="货物所在地" prop="address">
</el-table-column>
<el-table-column label="是否收货" prop="isTake">
</el-table-column>
<el-table-column label="添加时间" prop="addTime" width="160px">
</el-table-column>
<el-table-column align="center" label="操作" width="100px">
<template slot-scope="scope">
<el-link type="primary">编辑</el-link>
<el-link type="danger">删除</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="tableData.count > 0"
:total="tableData.count"
:page.sync="listQuery.page"
:limit.sync="listQuery.page_size"
@pagination="getList"
/>
</el-card>
</div>
</template>
<script>
import checkPermission from "@/utils/permission";
import Pagination from "@/components/Pagination";
const defaultewarehouse = {};
export default {
components: {Pagination},
data() {
return {
warehouse: defaultewarehouse,
tableData: {
count: 0,
results:[
{order:'06132132007928',name:'产品C',number:'10',attention:'易碎品',payer:'liman',payName:'李曼',phone:'13212340056',fromPlace:'北京市',receiver:'zongguan',receiverName:'公司综管',toPlace:'江苏省',receiverPhone:'13112340001',carNumber:'京M.6R625',address:'1号仓库',isTake:'',addTime:'2022-06-18 11:22:32'},
{order:'06132132007928',name:'产品C',number:'10',attention:'易碎品',payer:'liman',payName:'李曼',phone:'13212340056',fromPlace:'北京市',receiver:'zongguan',receiverName:'公司综管',toPlace:'江苏省',receiverPhone:'13112340001',carNumber:'京M.6R625',address:'1号仓库',isTake:'',addTime:'2022-06-18 11:22:32'},
{order:'06132132007928',name:'产品C',number:'10',attention:'易碎品',payer:'liman',payName:'李曼',phone:'13212340056',fromPlace:'北京市',receiver:'zongguan',receiverName:'公司综管',toPlace:'江苏省',receiverPhone:'13112340001',carNumber:'京M.6R625',address:'1号仓库',isTake:'',addTime:'2022-06-18 11:22:32'},
]
},
listQuery: {
page: 1,
page_size: 20,
},
keeperOptions: [],
depOptions: [],
listLoading: false,
};
},
computed: {},
watch: {},
methods: {
checkPermission,
},
};
</script>

View File

@ -0,0 +1,193 @@
<template>
<div class="app-container">
<el-card>
<div>
<el-button
v-if="checkPermission(['equipment_create'])"
type="primary"
icon="el-icon-plus"
>
新增
</el-button>
<el-input
v-model="listQuery.search"
style="width: 300px"
class="filter-item"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
>
刷新
</el-button>
</div>
</el-card>
<el-card shadow="false">
<el-table
v-loading="listLoading"
:data="tableData.results"
border
fit
stripe
highlight-current-row
height="100"
v-el-height-adaptive-table="{bottomOffset: 42}"
>
<el-table-column label="序号" type="index" width="80"/>
<el-table-column label="资料类别" prop="type" min-width="120">
</el-table-column>
<el-table-column label="资料编码" prop="code" min-width="120">
</el-table-column>
<el-table-column label="资料名称" prop="name" min-width="120" show-overflow-tooltip>
</el-table-column>
<el-table-column label="资料描述" prop="text" min-width="120" show-overflow-tooltip>
</el-table-column>
<el-table-column label="上传时间" prop="time" min-width="120">
</el-table-column>
<el-table-column label="上传人" prop="man" min-width="120">
</el-table-column>
<el-table-column label="资料状态" prop="status" min-width="120">
</el-table-column>
<el-table-column
align="center"
label="操作"
min-width="120px"
fixed="right"
>
<template slot-scope="scope">
<el-link type="primary"> 编辑</el-link>
<el-link type="danger">处理</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="tableData.count > 0"
:total="tableData.count"
:page.sync="listQuery.page"
:limit.sync="listQuery.page_size"
@pagination="getList"
/>
</el-card>
</div>
</template>
<script>
import {getpEquipmentList} from "@/api/equipment";
import {getUserList} from "@/api/user";
import {getOrgList} from "@/api/org";
import checkPermission from "@/utils/permission";
import {genTree} from "@/utils";
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
const defaultequipment = {
name: "",
number: "",
};
export default {
components: {Pagination},
data() {
return {
equipment: defaultequipment,
tableData: {
count: 4,
results:[
{type:'作业指导',code:'20220001',name:'冷加工工序操作手册',text:'冷加工工序操作规范及注意事项',time:'2022-10-12 10:23',man:'admin',status:'通过'},
{type:'图纸',code:'20220002',name:'产品B图纸',text:'长聘B的详情说明',time:'2022-9-10 10:23',man:'admin',status:'通过'},
{type:'质量缺陷',code:'20210002',name:'外观缺陷指南',text:'加工注意事项',time:'2021-07-12 10:23',man:'admin',status:'通过'},
{type:'故障维修',code:'20210001',name:'钢化炉故障维修指南',text:'钢化炉维修说明',time:'2021-10-12 10:23',man:'admin',status:'通过'},
],
},
listQuery: {
page: 1,
page_size: 20,
},
keeperOptions: [],
depOptions: [],
listLoading: true,
};
},
computed: {},
watch: {},
created() {
this.getList();
this.getUserList();
this.getOrgList();
},
methods: {
checkPermission,
//设备列表
getList() {
this.listLoading = true;
this.listQuery.type = 1;
getpEquipmentList(this.listQuery).then((response) => {
if (response.data) {
this.equipmentList = response.data;
}
this.listLoading = false;
});
},
//组员列表
getUserList() {
getUserList({pageoff: true}).then((res) => {
this.keeperOptions = genTree(res.data);
});
},
//部门列表
getOrgList() {
getOrgList({pageoff: true}).then((res) => {
this.depOptions = genTree(res.data);
});
},
handleFilter() {
this.listQuery.page = 1;
this.getList();
},
resetFilter() {
this.listQuery = {
page: 1,
page_size: 20,
}
this.getList();
},
handleCreate() {
this.equipment = Object.assign({}, defaultequipment);
this.dialogType = "new";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["Form"].clearValidate();
});
},
handleEdit(scope) {
this.equipment = Object.assign({}, scope.row); // copy obj
this.dialogType = "edit";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["Form"].clearValidate();
});
},
handleDelete(scope) {
this.$confirm("确认删除?", "警告", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "error",
})
.then(async () => {
//
})
.catch((err) => {
this.$message.error(err);
});
},
},
};
</script>

View File

@ -74,6 +74,13 @@
>
编辑
</el-link>
<el-link
v-if="checkPermission(['vendor_update'])"
type="primary"
@click="handleDetail(scope.row)"
>
详情
</el-link>
<el-link
v-if="checkPermission(['vendor_delete'])"
type="danger"
@ -252,7 +259,11 @@
this.$refs["Form"].clearValidate();
});
},
//详情
handleDetail(row){
sessionStorage.setItem('vendorItem',row)
this.$router.push({name: "vendorDetails", params: { id: row.id }, })
},
handleDelete(scope) {
this.$confirm("确认删除?", "警告", {
confirmButtonText: "确认",

View File

@ -0,0 +1,116 @@
<template>
<div class="app-container">
<el-card style="margin-top: 2px">
<el-descriptions title="供应商详情" :column="4" border direction="vertical" style="margin-bottom: 20px;width: 80%;">
<el-descriptions-item label="供应商名称">{{vendorItem.name}}</el-descriptions-item>
<el-descriptions-item label="联系人">{{vendorItem.contact}}
</el-descriptions-item>
<el-descriptions-item label="联系电话">{{vendorItem.contact_phone}}
</el-descriptions-item>
<el-descriptions-item label="地址">{{vendorItem.address}}</el-descriptions-item>
</el-descriptions>
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="物料列表" name="1">
<el-table
:data="tableData"
border
fit
row-key="id"
stripe
style="width: 100%"
height="500"
:tree-props="{children: 'children'}">
<el-table-column type="index" width="50"/>
<el-table-column label="物料名称">
<template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column>
<el-table-column label="规格型号">
<template slot-scope="scope">{{ scope.row.type }}</template>
</el-table-column>
<el-table-column label="物料编号">
<template slot-scope="scope">{{ scope.row.number }}</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="采购批次" name="2">
<el-table
:data="tableData1"
border
fit
stripe
style="width: 100%"
height="500"
>
<el-table-column type="index" width="50"/>
<el-table-column label="物料批次">
<template slot-scope="scope">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="物料名称">
<template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column>
<el-table-column label="规格型号">
<template slot-scope="scope">{{ scope.row.type }}</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-card>
</div>
</template>
<script>
import checkPermission from "@/utils/permission";
import {getpVendorList} from "@/api/vendor";
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
export default {
components: {Pagination},
data() {
return {
activeName:'1',
vendorItem:{},
vendorList: [],
tableData:[
{name:'铝硅酸盐玻璃',type:'1.8mm',number:'z001'},
{name:'硅酸盐玻璃',type:'1.8mm',number:'z002'},
{name:'胶片',type:'A',number:'a007'},
],
tableData1:[
{number:'ZC20221011',type:'1.8mm',name:'铝硅酸盐玻璃'},
{number:'ZC20220802',type:'1.8mm',name:'硅酸盐玻璃'},
{number:'ZC20220638',type:'A',name:'胶片'},
],
listQuery: {
page: 1,
page_size: 20,
},
};
},
created() {
this.id = this.$route.params.id;
},
mounted(){
this.getList();
},
methods: {
checkPermission,
getList() {
this.listLoading = true;
let vendorList = [];
getpVendorList(this.listQuery).then((response) => {
if (response.data) {
vendorList = response.data.results.filter(item=>{
return item.id===this.id;
});
debugger;
console.log(vendorList)
this.vendorItem = vendorList[0];
}
this.listLoading = false;
});
},
},
};
</script>

View File

@ -0,0 +1,346 @@
<template>
<div class="app-container">
<el-row :gutter="5">
<el-col :span="16">
<el-card>
<div class="chartsTitle">全年销售量分析</div>
<charts
:id="chartId1"
:options="barOptions"
:className="chartsName"
:height="domHeight"
width="100%"
>
</charts>
</el-card>
</el-col>
<el-col :span="8">
<el-card>
<div class="chartsTitle">季度销售比例分析</div>
<Echart
:options="pieOptions"
id="pieChart"
:height="domHeight"
></Echart>
</el-card>
</el-col>
</el-row>
<el-row :gutter="5" style="margin-top: 5px;">
<el-col>
<el-card>
<el-table
small
v-loading="planLoading"
:data="planList.results"
border
fit
stripe
size="mini"
highlight-current-row
height="100"
v-el-height-adaptive-table="{bottomOffset: 22}"
>
<el-table-column label="产品名称" prop="product_" min-width="150px" show-overflow-tooltip>
<template slot-scope="scope">{{scope.row.name}}</template>
</el-table-column>
<el-table-column label="一月" prop="january">
</el-table-column>
<el-table-column label="二月" prop="february">
</el-table-column>
<el-table-column label="三月" prop="march">
</el-table-column>
<el-table-column label="四月" prop="april">
</el-table-column>
<el-table-column label="五月" prop="may">
</el-table-column>
<el-table-column label="六月" prop="june">
</el-table-column>
<el-table-column label="七月" prop="july">
</el-table-column>
<el-table-column label="八月" prop="august">
</el-table-column>
<el-table-column label="九月" prop="september">
</el-table-column>
<el-table-column label="十月" prop="october">
</el-table-column>
<el-table-column label="十一月" prop="november">
</el-table-column>
<el-table-column label="十二月" prop="december">
</el-table-column>
<el-table-column label="合计" prop="total">
</el-table-column>
</el-table>
<pagination
v-show="planList.count > 0"
:total="planList.count"
:page.sync="planQuery.page"
:limit.sync="planQuery.page_size"
@pagination="getList"
/>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import charts from './charts.vue'
import Echart from '@/components/echart';
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
export default {
name: "progressStatistics",
components: {
Echart,
charts,
Pagination
},
data() {
return {
chartsName:'barChart',
chartId1:'chart1',
chartId2:'chart2',
pieOptions: {},
barOptions: {},
barOptions1: {},
orderList: {
count: 0,
results:[]
},
orderQuery: {
page: 1,
page_size: 20,
},
planList:{
count: 0,
results:[
{name:'双层隔音玻璃-01A',january:20,february:30,march:10,april:30,may:50,june:40,july:50,august:20,september:25,october:25,november:15,december:10,total:325},
{name:'双层隔音玻璃-02A',january:30,february:60,march:50,april:20,may:40,june:30,july:10,august:40,september:40,october:30,november:25,december:30,total:405},
{name:'双层隔音玻璃-03A',january:10,february:20,march:20,april:20,may:30,june:50,july:40,august:30,september:40,october:55,november:30,december:20,total:365},
{name:'双层隔音玻璃-01B',january:15,february:10,march:30,april:30,may:20,june:20,july:20,august:50,september:20,october:20,november:40,december:20,total:295},
{name:'双层隔音玻璃-02B',january:25,february:40,march:10,april:30,may:20,june:30,july:60,august:10,september:30,october:30,november:35,december:60,total:370},
{name:'合计',january:100,february:150,march:140,april:130,may:160,june:170,july:180,august:150,september:155,october:160,november:125,december:140,total:1760},
]
},
planQuery: {
page: 1,
page_size: 20,
},
cdata: {
xData: ["第一季度", "第二季度", "第三季度", "第四季度"],
seriesData: [
{value: 390, name: "第一季度"},
{value: 460, name: "第二季度"},
{value: 485, name: "第三季度"},
{value: 425, name: "第四季度"},
]
},
domHeight:'300px',
xAxisbar:["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
barData: [100, 150, 140, 130, 160, 170, 180,150,155,160,125,140],
xAxisbar1:[ "2021/09", "2021/10", "2021/11", "2021/12", "2022/01", "2022/02"],
barData1: [2, 2, 4, 3, 5, 2],
planLoading: false,
orderLoading: false,
}
},
watch: {
cdata: {
handler(newData) {
this.pieOptions = {
color: [
"#32c5e9",
"#ffdb5c"
],
legend: {
data:newData.xData,
top: 'top',
left: 'left',
orient: "vertical",
textStyle: {
color: "#556677", // 文字的颜色
}
},
tooltip: {
trigger: "item",
formatter: "{a} <br/>{b} : {c} ({d})"
},
toolbox: {
show: true
},
calculable: true,
series: [
{
name: '季度销售',
type: 'pie', // 设置图表类型为饼图
radius: '65%', // 饼图的半径外半径为可视区尺寸容器高宽中较小一项 55% 长度
center: ['50%', '50%'], //圆心位置
data:newData.seriesData
}
]
}
},
immediate: true,
},
immediate: true,
deep: true
},
created(){
let hei = document.getElementsByClassName('app-main')[0].clientHeight;
this.domHeight =hei/2+'px';
},
methods: {
},
mounted() {
this.domHeight='';
let hei = document.getElementsByClassName('app-main')[0].clientHeight;
this.domHeight =hei/2+'px';
this.barOptions ={
grid: {
top: '10%',
left: '3%',
right: '6%',
bottom: '1%',
containLabel: true
},
tooltip: {
trigger: 'item',
formatter: function (params) {
let color = params.color;//图例颜色
let htmlStr = '<div>';
htmlStr += params.name + '<br/>';
htmlStr += '<span style="height:10px;width:10px;font-size:12px;border-radius:5px;margin-right:5px;font-family:Consolas;display:inline-block;background:' + color + ';"></span>';
htmlStr += params.seriesName + '' + params.value;
htmlStr += '</div>';
return htmlStr;
}
},
xAxis: {
axisTick: {
show: false
},
splitLine: {
show: false, //去掉X轴分割线
},
data: this.xAxisbar,
},
yAxis: {
axisLine: {
show: true,//y轴线
},
axisTick: {
show: false//Y轴刻度线
},
axisLabel: {
color: '#333333'//Y轴文本颜色
},
splitLine: {
show: true, //Y轴分割线
lineStyle: {
color: '#dddddd'//Y轴分割线颜色
}
},
},
series: [{
name: '销售量',
type: 'bar',
barWidth: 20,
data: this.barData,
label: {
show: false, //开启显示
position: 'top', //在上方显示
formatter: '{c}',//显示百分号
textStyle: { //数值样式
color: 'black',//字体颜色
fontSize: 10//字体大小
}
},
itemStyle: {
color: '#409EFF'
},
}]
}
this.barOptions1 ={
grid: {
top: '10%',
left: '3%',
right: '6%',
bottom: '1%',
containLabel: true
},
tooltip: {
trigger: 'item',
formatter: function (params) {
let color = params.color;//图例颜色
let htmlStr = '<div>';
htmlStr += params.name + '<br/>';
htmlStr += '<span style="height:10px;width:10px;font-size:12px;border-radius:5px;margin-right:5px;font-family:Consolas;display:inline-block;background:' + color + ';"></span>';
htmlStr += params.seriesName + '' + params.value;
htmlStr += '</div>';
return htmlStr;
}
},
xAxis: {
axisTick: {
show: false
},
splitLine: {
show: false, //去掉X轴分割线
},
data: this.xAxisbar1,
},
yAxis: {
axisLine: {
show: true,//y轴线
},
axisTick: {
show: false//Y轴刻度线
},
axisLabel: {
color: '#333333'//Y轴文本颜色
},
splitLine: {
show: true, //Y轴分割线
lineStyle: {
color: '#dddddd'//Y轴分割线颜色
}
},
},
series: [{
name: '产品交付数',
type: 'bar',
barWidth: 20,
data: this.barData1,
label: {
show: true, //开启显示
position: 'top', //在上方显示
formatter: '{c}',//显示百分号
textStyle: { //数值样式
color: 'black',//字体颜色
fontSize: 10//字体大小
}
},
itemStyle: {
color: '#409EFF'
},
}]
}
let sum =this.barData.reduce(function(pre,curr){
sum = pre+curr
return sum
})
console.log(sum)
}
}
</script>
<style scoped>
.chartsTitle{
text-align: center;
height: 35px;
line-height: 35px;
font-size: 22px;
}
</style>