From 461144f7e595f3d0176c4d7ad19849ec6e490a26 Mon Sep 17 00:00:00 2001 From: pengda <10266652509@qq.com> Date: Tue, 6 May 2025 09:23:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E4=BB=B7=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/super/RankingLeftMenu.vue | 18 ++ src/router/index.js | 12 ++ src/views/super/Ranking/Purchase.vue | 337 +++++++++++++++++++++++++++++++ 3 files changed, 367 insertions(+) create mode 100644 src/views/super/Ranking/Purchase.vue diff --git a/src/components/super/RankingLeftMenu.vue b/src/components/super/RankingLeftMenu.vue index 24c86e6..5df9f50 100644 --- a/src/components/super/RankingLeftMenu.vue +++ b/src/components/super/RankingLeftMenu.vue @@ -73,6 +73,24 @@ export default { }, ] }, + { + name: '设置', + imgActive: require('@/assets/super/ranking-menu.svg'), + list: [ + { + name: '采购价', + path: '/super/ranking/purchase', + }, + { + name: '阶段采购', + path: '/super/ranking/stagePurchase', + }, + // { + // name: '订单列表', + // path: '/super/ranking/agentNew', + // }, + ] + }, ] } }, diff --git a/src/router/index.js b/src/router/index.js index 60a06ae..d58299f 100755 --- a/src/router/index.js +++ b/src/router/index.js @@ -176,6 +176,18 @@ const routes = [{ component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankDetail.vue'), props: {pageTitle:'代理商 - 新加盟', type: 'agentnew', showDateSelect: false} }, + { + path: 'purchase', + name: '采购价', + component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/Purchase.vue'), + props: {pageTitle:'设置 - 采购价', type: 'purchase'} + }, + { + path: 'stagePurchase', + name: '阶段采购价', + component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/Purchase.vue'), + props: {pageTitle:'设置 - 阶段采购', type: 'stagePurchase'} + }, ] }, { diff --git a/src/views/super/Ranking/Purchase.vue b/src/views/super/Ranking/Purchase.vue new file mode 100644 index 0000000..9eecb47 --- /dev/null +++ b/src/views/super/Ranking/Purchase.vue @@ -0,0 +1,337 @@ +<template> + <div class="demo-wrap min-flex-right"> + <div class="flex-between"> + <h2>{{ pageTitle }}</h2> + <el-button type="primary" @click="openDialog">新增</el-button> + + <GuipDialog :dialogVisible="dialogVisible" :title="dialogTitle" :show-close-button="false" + :show-cancel-button="showCancelButton" @confirm="handleConfirm" @cancel="handleCancel" @close="handleClose" + @dialogVisibleChange="dialogVisibleChange"> + <el-form :model="form" class="el-row demo-ruleForm" ref="formRef"> + <el-form-item label="检测类型" prop="type"> + <GuipSelect v-model="form.type" :options="type2nameOptions" :defaultValue="form.typename" /> + </el-form-item> + <el-form-item label="采购单价" prop="type" label-width="73px"> + <div style="display: flex; align-items: center; gap: 8px; width: 100%;"> + <GuipInput v-model="form.unit_price" style="flex: 1;" :default-value="form.unit_price" /> + <span>元 /</span> + <GuipInput v-model="form.unit_num" style="flex: 1;" :default-value="form.unit_num"/> + <span>字(篇/页)</span> + </div> + </el-form-item> + + <template v-if="type != 'purchase'"> + <el-form-item label="阶段成本" prop="type" label-width="73px"> + <div style="display: flex; align-items: center; gap: 8px; width: 100%;"> + <GuipInput v-model="form.cost" style="flex: 1;" :default-value="form.cost"/> + <span>元</span> + </div> + </el-form-item> + <el-form-item label="起止日期" prop="type" label-width="73px"> + <el-date-picker v-model="form.date" type="daterange" range-separator="至" start-placeholder="开始日期" + end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" :default-value="form.date"> + </el-date-picker> + </el-form-item> + </template> + </el-form> + </GuipDialog> + </div> + <div class=" flex-common"> + <el-form> + <el-table :data="tableData" style="width: 100%"> + <template v-if="type == 'purchase'"> + <el-table-column label="检测类型"> + <template slot-scope="scope"> + {{ type2name[scope.row.type] }} + </template> + </el-table-column> + + <el-table-column label="采购单价"> + <template slot-scope="scope"> + {{ scope.row.unit_price }} / {{ scope.row.unit_num==1 ? '篇' : scope.row.unit_num + '字' }} + </template> + </el-table-column> + + <el-table-column label="操作" width="200"> + <template slot-scope="scope"> + <a @click="editPurchase(scope.row)" style="color: #006aff">编辑</a> + </template> + </el-table-column> + </template> + + <template v-else> + <el-table-column label="检测类型"> + <template slot-scope="scope"> + {{ type2name[scope.row.type] }} + </template> + </el-table-column> + + <el-table-column label="采购价"> + <template slot-scope="scope"> + <template v-if="scope.row.unit_price>0"> + 单价:{{ scope.row.unit_price }} 元 / {{ scope.row.unit_num==1 ? '篇' : scope.row.unit_num + '字' }} + </template> + <template v-else> + 成本:{{ scope.row.cost }} 元 + </template> + </template> + </el-table-column> + + <el-table-column label="起止日期"> + <template slot-scope="scope"> + {{ scope.row.start_date.substring(0, 10) }} - {{ scope.row.end_date.substring(0, 10) }} + </template> + </el-table-column> + + <el-table-column label="操作" width="200"> + <template slot-scope="scope"> + <a @click="editStagePurchase(scope.row)" style="color: #006aff">编辑</a> + </template> + </el-table-column> + </template> + </el-table> + + <el-pagination background + @size-change='handleSizeChange' + @current-change='handleCurrentChange' + :current-page="currentPage" + :page-size=pageSize + layout="prev, pager, next,jumper" + :total="total"> + </el-pagination> + </el-form> + </div> + </div> +</template> +<script> + +import GuipDialog from "@/components/GuipDialog.vue"; +import GuipSelect from "@/components/GuipSelect.vue"; +import GuipInput from "@/components/GuipInput.vue"; + +export default { + name: 'purchase', + props: { + pageTitle: { + type: String, + default: '' + }, + type: { + type: String, + default: '' + }, + showDateSelect: { + type: Boolean, + default: true + } + }, + components: { + GuipInput, + GuipSelect, + GuipDialog + }, + data() { + return { + chktype:0, + currentPage: 1, //当前页 + pageSize: 5, //每页的容量 + total: 0, //列表总数 + tableData: [], + type2name: [], + dialogTitle: '新增',//弹框标题 + dialogVisible: false,//是否展示弹框 + showCancelButton: true, // 控制是否显示取消按钮 + showCloseButton: true, // 控制是否显示关闭按钮 + form: { + type: '', + typename: '', + unit_price: '', + unit_num: '', + cost: '', + sdate: '', + edate: '', + }, + } + }, + mounted() { + this.init() + }, + computed: { + type2nameOptions() { + return Object.entries(this.type2name).map(([value, label]) => ({ + label, + value: Number(value) // 如果你需要 value 是数字 + })); + } + }, + watch: { + '$route'() { + this.init() + }, + 'form.date'(newVal) { + if (Array.isArray(newVal) && newVal.length === 2) { + this.form.sdate = this.formatDateTime(new Date(newVal[0])); + this.form.edate = this.formatDateTime(new Date(newVal[1])); + } else { + this.form.sdate = ''; + this.form.edate = ''; + } + } + }, + methods: { + init() { + document.title = this.pageTitle; + + if (this.type == 'purchase') { + this.getPurchase() + } else { + this.getStagePurchase() + } + }, + getPurchase() { + const that = this + that.tableData = [] + this.$http('POST', '/supernew/ajax_get_purchase_list', { + type: that.chktype, + cur_page: that.currentPage, + page_size: that.pageSize, + }).then(response => { + this.$nextTick(() => { + that.tableData = response.data.list + that.type2name = response.data.type2name + that.total = response.data.total + }) + }).catch(error => { + console.error(error, 'error') + }) + }, + getStagePurchase() { + const that = this + that.tableData = [] + this.$http('POST', '/supernew/ajax_get_stage_purchase', { + type: that.chktype, + cur_page: that.currentPage, + page_size: that.pageSize, + }).then(response => { + this.$nextTick(() => { + that.tableData = response.data.list + that.type2name = response.data.type2name + that.total = response.data.total + }) + }).catch(error => { + console.error(error, 'error') + }) + }, + handleSizeChange(val) { + this.pageSize = val + this.init() + }, + handleCurrentChange(val) { + this.currentPage = val + this.init() + }, + openDialog() { + this.form.type = '' + this.form.typename = '' + this.form.unit_price = '' + this.form.unit_num = '' + this.dialogVisible = true; + }, // 确认按钮事件 + handleConfirm() { + console.log('提交成功:', this.form); + const that = this + if(!that.form.type){ + this.$message.warning('请选择检测类型'); + return + } + if(that.type == 'purchase'){ + if(!that.form.unit_price || !that.form.unit_num){ + this.$message.warning('请输入采购单价'); + return + } + + this.$http('POST', '/supernew/ajax_save_purchase', { + type: that.form.type, + unit_price: that.form.unit_price, + unit_num: that.form.unit_num, + }).then(response => { + this.$nextTick(() => { + if(!response.status){ + this.$message.warning(response.info); + } + this.dialogVisible = false; + }) + }).catch(error => { + this.$message.warning(error); + this.dialogVisible = false; + }) + }else{ + if((!that.form.unit_price || !that.form.unit_num) && !that.form.cost){ + this.$message.warning('请输入采购单价或阶段成本'); + return + } + + if(!that.form.sdate || !that.form.edate){ + this.$message.warning('请选择起止日期'); + return + } + + this.$http('POST', '/supernew/ajax_save_stage_purchase', { + type: that.form.type, + unit_price: that.form.unit_price, + unit_num: that.form.unit_num, + cost: that.form.cost, + sdate: that.form.sdate, + edate: that.form.edate, + }).then(response => { + this.$nextTick(() => { + if(!response.status){ + this.$message.warning(response.info); + } + this.dialogVisible = false; + }) + }).catch(error => { + this.$message.warning(error); + this.dialogVisible = false; + }) + } + }, + // 取消按钮事件 + handleCancel() { + // this.$message.warning('点击了取消按钮'); + this.dialogVisible = false; + }, + // 关闭弹框事件 + handleClose() { + // this.$message.info('弹框已关闭'); + this.dialogVisible = false; + }, + dialogVisibleChange(data) { + console.log(data, 'data098908090'); + }, + formatDateTime(date) { + const pad = n => n.toString().padStart(2, '0'); + const Y = date.getFullYear(); + const M = pad(date.getMonth() + 1); + const D = pad(date.getDate()); + return `${Y}-${M}-${D}`; + }, + editPurchase(row){ + this.form.type = row.type + this.form.typename = this.type2name[row.type] + this.form.unit_price = row.unit_price + this.form.unit_num = row.unit_num + this.dialogVisible = true; + }, + editStagePurchase(row){ + this.form.type = row.type + this.form.typename = this.type2name[row.type] + this.form.unit_price = row.unit_price + this.form.unit_num = row.unit_num + this.dialogVisible = true; + } + } +} +</script> +<style scoped lang="scss"> +</style> \ No newline at end of file