优化更新

This commit is contained in:
磷叶 2024-12-19 17:53:54 +08:00
parent 7223ceca8a
commit d082c08888
12 changed files with 81 additions and 52 deletions

View File

@ -5,7 +5,7 @@
:limit="1"
accept=".xlsx, .xls"
:headers="headers"
:action="uploadUrl + '?updateSupport=' + updateSupport"
:action="uploadUrl"
:disabled="isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
@ -15,11 +15,12 @@
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="updateSupport">更新已经存在的数据</el-checkbox>
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
<div class="el-upload__tip" slot="tip" style="margin-top: 8px;">
<slot name="options"/>
</div>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
@ -57,7 +58,7 @@ export default {
templateName: {
type: String,
default: "导入模板"
}
},
},
data() {
return {
@ -93,6 +94,7 @@ export default {
this.$refs.upload.clearFiles();
if (response.code === 200) {
this.$message.success(`扫描到${response.data}条数据,正在导入中,可在导入日志中查看导入结果`);
this.show = false;
this.$emit('success');
}
},

View File

@ -15,12 +15,18 @@
:value="dict.value"
/>
</el-select>
<dept-tree-select v-else-if="type === 'dept'" v-model="queryParams[prop]" class="small-tree-select" width="200px" @change="handleQuery"/>
<date-range-picker v-else-if="type === 'daterange'" v-model="queryParams[prop]" @change="handleQuery"/>
</el-form-item>
</template>
<script>
import DeptTreeSelect from "@/components/Business/Dept/DeptTreeSelect.vue";
import DateRangePicker from "@/components/DateRangePicker/index.vue";
export default {
name: "SearchFormItem",
components: {DateRangePicker, DeptTreeSelect},
props: {
queryParams: {
type: Object,
@ -40,7 +46,7 @@ export default {
type: String,
default: 'input',
validator: function (value) {
return ["custom", "input", "dict", 'date', "dateRange"].includes(value);
return ["custom", "input", "dict", 'date', "daterange", 'dept'].includes(value);
},
},
//

View File

@ -1,11 +1,10 @@
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
/* Layout */
import Layout from '@/layout'
Vue.use(Router)
/**
* Note: 路由配置项
*
@ -85,7 +84,7 @@ export const constantRoutes = [
{
path: 'report',
component: () => import('@/views/yh/report/edit/edit.vue'),
name: 'ReportEdit',
name: 'ReportAdd',
meta: { title: '新增报表', noCache: false}
},
]

View File

@ -34,6 +34,10 @@ export const PriceStatus = {
canEnable(status) {
return [this.PASS].includes(status);
},
// 允许删除
canDel(status) {
return [this.WAIT_SUBMIT, this.REJECT].includes(status);
}
}
// 工资模式

View File

@ -216,7 +216,7 @@ export default {
{key: 'erpNumber', visible: true, label: '物料编码', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'erpName', visible: true, label: '名称', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'erpSpec', visible: true, label: '规格', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'workShops', visible: true, label: '车间', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
// {key: 'workShops', visible: true, label: '', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'category', visible: true, label: '规格品类', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'size', visible: true, label: '大小', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'surface', visible: true, label: '表面处理', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},

View File

@ -251,6 +251,14 @@
v-has-permi="['yh:price:enable']"
v-show="PriceStatus.canEnable(scope.row.status) && scope.row.disabled"
>启用</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-circle-delete"
@click="handleDelete(scope.row)"
v-has-permi="['yh:price:delete']"
v-show="PriceStatus.canDel(scope.row.status)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
@ -322,23 +330,29 @@
<import-dialog
:visible.sync="showImport"
template-url="/yh/price/importTemplate"
url="/yh/price/importData"
:url="uploadUrl"
@success="getList"
template-name="单价导入模板"
/>
>
<template #options>
<el-checkbox v-model="uploadParams.updateSupport">更新已经存在的数据</el-checkbox>
<el-checkbox v-model="uploadParams.verified" v-has-permi="['yh:price:verify']">无需审核直接通过</el-checkbox>
</template>
</import-dialog>
</div>
</template>
<script>
import {
listPrice,
getPrice,
delPrice,
addPrice,
updatePrice,
submitPrice,
cancelPrice,
delPrice,
disablePrice,
cancelPrice, enablePrice
enablePrice,
getPrice,
listPrice,
submitPrice,
updatePrice
} from "@/api/yh/price";
import {$showColumns} from '@/utils/mixins';
import DeptTreeSelect from "@/components/Business/Dept/DeptTreeSelect.vue";
@ -348,6 +362,7 @@ import VerifyPriceDialog from "@/views/yh/price/components/VerifyPriceDialog.vue
import FormCol from "@/components/FormCol/index.vue";
import ImportDialog from "@/components/ImportDialog/index.vue";
import {formatFraction} from "../../../utils";
import {tansParams} from "@/utils/ruoyi";
//
const defaultSort = {
@ -360,13 +375,13 @@ export default {
mixins: [$showColumns],
dicts: ['price_status'],
components: {ImportDialog, FormCol, VerifyPriceDialog, BooleanTag, DeptTreeSelect},
computed: {
PriceStatus() {
return PriceStatus
}
},
data() {
return {
PriceStatus,
uploadParams: {
updateSupport: false,
verified: false,
},
showImport: false,
gutter: 8,
span: 8,
@ -468,6 +483,12 @@ export default {
}
};
},
computed: {
uploadUrl() {
let url = `/yh/price/importData?${tansParams(this.uploadParams)}`;
return url.slice(0, -1);
}
},
created() {
this.getList();
},
@ -649,9 +670,8 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const priceIds = row.priceId || this.ids;
this.$modal.confirm('是否确认删除单价编号为"' + priceIds + '"的数据项?').then(function() {
return delPrice(priceIds);
this.$modal.confirm('是否确认删除单价ID为"' + row.priceId + '"的数据项?').then(function() {
return delPrice(row.priceId);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");

View File

@ -132,6 +132,7 @@
:visible.sync="showMore"
:rules="rules"
:user-query="userQuery"
:price-query="priceQuery"
@submit="onSubmitRow"
/>

View File

@ -8,12 +8,10 @@
</form-col>
</template>
</el-table-column>
<el-table-column label="产量" align="center" min-width="180" >
<el-table-column :label="`产量 (${priceUnit})`" align="center" min-width="180" >
<template slot-scope="d">
<form-col table label-width="0" :prop="`orderProdList[${d.$index}].num`" :rules="rules.num">
<el-input v-model.number="d.row.num" type="number" :min="0" placeholder="请输入订单产量">
<template #suffix v-if="priceUnit != null">{{priceUnit}}</template>
</el-input>
<el-input-number v-model="d.row.num" type="number" :min="0" placeholder="请输入订单产量" controls-position="right" style="width: 100%"/>
</form-col>
</template>
</el-table-column>

View File

@ -9,7 +9,7 @@
<el-form :model="form" :rules="rules" ref="form" label-width="6em">
<el-row>
<form-col :span="span" label="工序" prop="priceId">
<price-input v-model="form.priceId" open-type="dialog" @change="onChangePrice" placeholder="点击选择工序" title="选择工序"/>
<price-input v-model="form.priceId" :query="priceQuery" open-type="dialog" @change="onChangePrice" placeholder="点击选择工序" title="选择工序"/>
</form-col>
<form-col :span="span" label="工序类型" prop="priceType">
<el-select v-model="form.priceType" style="width: 100%">
@ -17,18 +17,12 @@
</el-select>
</form-col>
<form-col :span="span" label="良品数" prop="num">
<el-input v-model.number="form.num" type="number" :min="0" placeholder="请输入良品数">
<template #suffix>
{{form.priceUnit}}
</template>
</el-input>
<el-input-number v-model="form.num" type="number" :min="0" placeholder="请输入良品数" controls-position="right" style="width: calc(100% - 2em)"/>
{{form.priceUnit}}
</form-col>
<form-col :span="span" label="不良品数" prop="defectNum">
<el-input v-model.number="form.defectNum" type="number" :min="0" placeholder="请输入不良品数">
<template #suffix>
{{form.priceUnit}}
</template>
</el-input>
<el-input-number v-model="form.defectNum" type="number" :min="0" placeholder="请输入不良品数" controls-position="right" style="width: calc(100% - 2em)"/>
{{form.priceUnit}}
</form-col>
<form-col :span="span" label="单价">
{{form.pricePrice | dv}}
@ -100,6 +94,11 @@ export default {
userQuery: {
type: Object,
default: () => ({})
},
//
priceQuery: {
type: Object,
default: () => ({})
}
},
data() {

View File

@ -8,12 +8,10 @@
</form-col>
</template>
</el-table-column>
<el-table-column label="产量" align="center">
<el-table-column :label="`产量 (${priceUnit})`" align="center">
<template slot-scope="d">
<form-col table label-width="0" :prop="`userProdList[${d.$index}].num`" :rules="rules.num">
<el-input v-model.number="d.row.num" type="number" placeholder="请输入员工产量">
<template #suffix v-if="priceUnit != null">{{priceUnit}}</template>
</el-input>
<el-input-number v-model="d.row.num" type="number" placeholder="请输入员工产量" controls-position="right" style="width: 100%"/>
</form-col>
</template>
</el-table-column>

View File

@ -46,10 +46,10 @@
</template>
<template slot-scope="d">
<form-col table label-width="0" v-if="form.mode === IncomeMode.COUNT" :prop="`list[${d.$index}].num`" :rules="rules.list.num">
<el-input v-model="d.row.num" type="number" placeholder="请输入员工产量" :min="1"/>
<el-input-number v-model="d.row.num" type="number" placeholder="请输入员工产量" :min="1" controls-position="right" style="width: 100%"/>
</form-col>
<form-col table label-width="0" v-if="form.mode === IncomeMode.SCORE" :prop="`list[${d.$index}].score`" :rules="rules.list.score">
<el-input v-model="d.row.score" type="number" placeholder="请输入员工分数" :min="0"/>
<el-input-number v-model="d.row.score" type="number" placeholder="请输入员工分数" :min="0" controls-position="right" style="width: 100%"/>
</form-col>
</template>
</el-table-column>
@ -80,7 +80,6 @@
import FormCol from "@/components/FormCol/index.vue";
import UserInput from "@/components/Business/User/UserInput.vue";
import UserDialog from "@/components/Business/User/UserDialog.vue";
import {isEmpty} from "@/utils";
import {IncomeMode} from "@/utils/constants";
import UserDrawer from "@/components/Business/User/UserDrawer.vue";
import {listUserWithShift} from "@/api/system/user";

View File

@ -254,10 +254,12 @@ export default {
},
searchColumns: [
{key: 'reportId', label: "报表编号", type: 'input', dictType: null},
{key: 'priceType', label: "类型", type: 'dict', dictType: 'price_type'},
{key: 'reportStatus', label: "报表状态", type: 'dict', dictType: 'report_status'},
{key: 'priceDeptId', label: "车间", type: 'dept', dictType: null},
{key: 'reportDateRange', label: "报表日期", type: 'daterange', dictType: null},
{key: 'priceName', label: "工序", type: 'input', dictType: null},
{key: 'priceSubName', label: "子工序", type: 'input', dictType: null},
{key: 'priceType', label: "类型", type: 'dict', dictType: 'price_type'},
{key: 'priceCategory', label: "类别", type: 'input', dictType: null},
{key: 'priceSize', label: "大小", type: 'input', dictType: null},
{key: 'pricePattern', label: "图案", type: 'input', dictType: null},
@ -268,9 +270,10 @@ export default {
span: 24,
//
columns: [
{key: 'id', visible: true, label: '编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'id', visible: true, label: '编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
{key: 'reportId', visible: true, label: '报表编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
{key: 'reportStatus', visible: true, label: '报表状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
{key: 'priceDeptName', visible: true, label: '车间', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'priceName', visible: true, label: '工序', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'priceSubName', visible: true, label: '子工序', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
{key: 'priceType', visible: true, label: '类型', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
@ -494,7 +497,7 @@ export default {
handleExport() {
this.download('yh/reportProd/export', {
...this.queryParams
}, `reportProd_${new Date().getTime()}.xlsx`)
}, `产量报表_${new Date().getTime()}.xlsx`)
}
}
};