202507021429
This commit is contained in:
parent
aed6be5c3a
commit
419e0f18a4
|
|
@ -1,350 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input
|
||||
v-model="queryParams.unit"
|
||||
placeholder="请输入单位"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,350 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,356 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,356 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,358 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="10"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="10"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,358 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,352 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,362 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
|
||||
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,363 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,381 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
clearable
|
||||
maxlength="5"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
// 保证 goodId 是字符串数组
|
||||
if (Array.isArray(this.queryParams.goodId)) {
|
||||
this.queryParams.goodId = this.queryParams.goodId.map(String)
|
||||
}
|
||||
// 校验价格区间
|
||||
if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '' && this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
// 两个都填写了,才允许查询
|
||||
this.getList()
|
||||
} else if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '') ||
|
||||
(this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
this.$message.warning('请同时输入价格区间的最小值和最大值')
|
||||
} else {
|
||||
// 都没填,允许查询
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,385 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="价格区间" prop="priceRange">
|
||||
<el-input
|
||||
v-model="queryParams.priceMin"
|
||||
placeholder="最低价"
|
||||
style="width: 100px; margin-right: 10px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
<span style="margin: 0 5px;">-</span>
|
||||
<el-input
|
||||
v-model="queryParams.priceMax"
|
||||
placeholder="最高价"
|
||||
style="width: 100px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
priceMin: null,
|
||||
priceMax: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
// 保证 goodId 是字符串数组
|
||||
if (Array.isArray(this.queryParams.goodId)) {
|
||||
this.queryParams.goodId = this.queryParams.goodId.map(String)
|
||||
}
|
||||
// 校验价格区间
|
||||
if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '' && this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
// 两个都填写了,才允许查询
|
||||
this.getList()
|
||||
} else if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '') ||
|
||||
(this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
this.$message.warning('请同时输入价格区间的最小值和最大值')
|
||||
} else {
|
||||
// 都没填,允许查询
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,385 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="价格区间" prop="priceRange">
|
||||
<el-input
|
||||
v-model="queryParams.priceMin"
|
||||
placeholder="最低价"
|
||||
style="width: 100px; margin-right: 10px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
<span style="margin: 0 5px;">-</span>
|
||||
<el-input
|
||||
v-model="queryParams.priceMax"
|
||||
placeholder="最高价"
|
||||
style="width: 100px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
priceMin: null,
|
||||
priceMax: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
// 保证 goodId 是字符串数组
|
||||
if (Array.isArray(this.queryParams.goodId)) {
|
||||
this.queryParams.goodId = this.queryParams.goodId.map(String)
|
||||
}
|
||||
// 校验价格区间
|
||||
if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '' && this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
// 两个都填写了,才允许查询
|
||||
this.getList()
|
||||
} else if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '') ||
|
||||
(this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
this.$message.warning('请同时输入价格区间的最小值和最大值')
|
||||
} else {
|
||||
// 都没填,允许查询
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,385 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="价格区间" prop="priceRange">
|
||||
<el-input
|
||||
v-model="queryParams.priceMin"
|
||||
placeholder="最低价"
|
||||
style="width: 100px; margin-right: 10px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
<span style="margin: 0 5px;">-</span>
|
||||
<el-input
|
||||
v-model="queryParams.priceMax"
|
||||
placeholder="最高价"
|
||||
style="width: 100px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
priceMin: null,
|
||||
priceMax: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
// 保证 goodId 是字符串数组
|
||||
if (Array.isArray(this.queryParams.goodId)) {
|
||||
this.queryParams.goodId = this.queryParams.goodId.map(String)
|
||||
}
|
||||
// 校验价格区间
|
||||
if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '' && this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
// 两个都填写了,才允许查询
|
||||
this.getList()
|
||||
} else if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '') ||
|
||||
(this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
this.$message.warning('请同时输入价格区间的最小值和最大值')
|
||||
} else {
|
||||
// 都没填,允许查询
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,385 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="价格区间" prop="priceRange">
|
||||
<el-input
|
||||
v-model="queryParams.priceMin"
|
||||
placeholder="最低价"
|
||||
style="width: 100px; margin-right: 10px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
<span style="margin: 0 5px;">-</span>
|
||||
<el-input
|
||||
v-model="queryParams.priceMax"
|
||||
placeholder="最高价"
|
||||
style="width: 100px;"
|
||||
type="number"
|
||||
min="0"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入类型"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
priceMin: null,
|
||||
priceMax: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
// 保证 goodId 是字符串数组
|
||||
if (Array.isArray(this.queryParams.goodId)) {
|
||||
this.queryParams.goodId = this.queryParams.goodId.map(String)
|
||||
}
|
||||
// 校验价格区间
|
||||
if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '' && this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
// 两个都填写了,才允许查询
|
||||
this.getList()
|
||||
} else if (
|
||||
(this.queryParams.priceMin !== null && this.queryParams.priceMin !== '') ||
|
||||
(this.queryParams.priceMax !== null && this.queryParams.priceMax !== '')
|
||||
) {
|
||||
this.$message.warning('请同时输入价格区间的最小值和最大值')
|
||||
} else {
|
||||
// 都没填,允许查询
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,508 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const newRow = { ...this.editRow, [this.editField]: this.editFieldValue };
|
||||
try {
|
||||
await this.$API.updateIntegralProduct(newRow); // 你可能需要将 updateIntegralProduct 改为实际的API调用
|
||||
this.editRow[this.editField] = this.editFieldValue;
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,508 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const newRow = { ...this.editRow, [this.editField]: this.editFieldValue };
|
||||
try {
|
||||
await updateServiceGoods(newRow);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,508 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const newRow = { ...this.editRow, [this.editField]: this.editFieldValue };
|
||||
try {
|
||||
await updateServiceGoods(newRow);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,508 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const newRow = { ...this.editRow, [this.editField]: this.editFieldValue };
|
||||
try {
|
||||
await updateServiceGoods(newRow);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,511 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: this.editFieldValue
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,511 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: this.editFieldValue
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,514 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,514 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,515 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,515 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_goods_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods } from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,533 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,533 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,533 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,532 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,532 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,532 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,531 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,530 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input
|
||||
v-model="queryParams.subTitle"
|
||||
placeholder="请输入副标题"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:ServiceGoods:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:ServiceGoods:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ServiceGoodsList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="分类" align="center" prop="cateName"/>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="图标" align="center" prop="icon" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="副标题" align="center" prop="subTitle" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'price', '价格')">{{ scope.row.price }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'price', '价格')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="销量" align="center" width="75" prop="sales">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sales', '销量')">{{ scope.row.sales }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sales', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存" align="center" width="75" prop="stock">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'stock', '销量')">{{ scope.row.stock }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'stock', '销量')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序" align="center" width="75" prop="sort">
|
||||
<template slot-scope="scope">
|
||||
<div style="cursor:pointer;color:#409EFF;display:inline-block;">
|
||||
<span @click="openEditDialog(scope.row, 'sort', '排序')">{{ scope.row.sort }}</span>
|
||||
<svg @click="openEditDialog(scope.row, 'sort', '排序')" width="14" height="14" viewBox="0 0 1024 1024" fill="#bbb" style="margin-left:4px;vertical-align:middle;cursor:pointer;"><path d="M880.64 227.84l-84.48-84.48c-25.6-25.6-67.2-25.6-92.8 0l-59.52 59.52 177.28 177.28 59.52-59.52c25.6-25.6 25.6-67.2 0-92.8zM160 736v128h128l376.32-376.32-128-128L160 736z"/></svg>
|
||||
<div style="border-bottom:1px dashed #bbb;width:100%;margin-top:2px;"></div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" width="85" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
@change="handlefenleiStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:ServiceGoods:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改服务内容对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="图标" prop="icon">
|
||||
<image-upload v-model="form.icon"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮播图" prop="imgs">
|
||||
<image-upload v-model="form.imgs"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题" prop="subTitle">
|
||||
<el-input v-model="form.subTitle" placeholder="请输入副标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简介" prop="info">
|
||||
<el-input v-model="form.info" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="列表价格显示" prop="priceZn">
|
||||
<el-input v-model="form.priceZn" placeholder="请输入列表价格显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销量" prop="sales">
|
||||
<el-input v-model="form.sales" placeholder="请输入销量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="库存" prop="stock">
|
||||
<el-input v-model="form.stock" placeholder="请输入库存" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_goods_status"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="sku">
|
||||
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="请输入经度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="纬度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="请输入纬度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类" prop="cateId">
|
||||
<el-input v-model="form.cateId" placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="project">
|
||||
<el-input v-model="form.project" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料费用" prop="material">
|
||||
<el-input v-model="form.material" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮费" prop="postage">
|
||||
<el-input v-model="form.postage" placeholder="请输入邮费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基检现象" prop="basic">
|
||||
<el-input v-model="form.basic" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-input v-model="form.skillIds" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="deletedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.deletedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="audioDialogVisible" title="录音播放" width="400px">
|
||||
<audio v-if="currentAudioUrl" :src="currentAudioUrl" controls style="width:100%"></audio>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="editDialogVisible" title="编辑" width="300px">
|
||||
<el-form>
|
||||
<el-form-item :label="editFieldLabel">
|
||||
<el-input v-model="editFieldValue" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveEditField">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus} from "@/api/system/ServiceGoods"
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 服务内容表格数据
|
||||
ServiceGoodsList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
title: null,
|
||||
subTitle: null,
|
||||
status: null,
|
||||
type: '1',
|
||||
project: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
subTitle: [
|
||||
{ required: true, message: "副标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
sales: [
|
||||
{ required: true, message: "销量不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态不能为空", trigger: "change" }
|
||||
],
|
||||
},
|
||||
audioDialogVisible: false,
|
||||
currentAudioUrl: '',
|
||||
editDialogVisible: false,
|
||||
editFieldValue: '',
|
||||
editField: '',
|
||||
editFieldLabel: '',
|
||||
editRow: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询服务内容列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listServiceGoods(this.queryParams).then(response => {
|
||||
this.ServiceGoodsList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
title: null,
|
||||
icon: null,
|
||||
imgs: null,
|
||||
subTitle: null,
|
||||
info: null,
|
||||
price: null,
|
||||
priceZn: null,
|
||||
sales: null,
|
||||
stock: null,
|
||||
status: null,
|
||||
description: null,
|
||||
skuType: null,
|
||||
sku: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
type: null,
|
||||
cateId: null,
|
||||
project: null,
|
||||
sort: null,
|
||||
material: null,
|
||||
postage: null,
|
||||
basic: null,
|
||||
margin: null,
|
||||
skillIds: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
this.handleQuery()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
|
||||
// 任务状态修改
|
||||
handlefenleiStatusChange(row) {
|
||||
let text = row.status === "0" ? "启用" : "停用"
|
||||
this.$modal.confirm('确认要"' + text + '""' + row.title + '"状态吗?').then(function() {
|
||||
return changefenleiStatus(row.id, row.status)
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function() {
|
||||
row.status = row.status === "0" ? "1" : "0"
|
||||
})
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加服务内容"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getServiceGoods(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除服务内容编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delServiceGoods(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/ServiceGoods/export', {
|
||||
...this.queryParams
|
||||
}, `ServiceGoods_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
playAudio(url) {
|
||||
this.currentAudioUrl = url
|
||||
this.audioDialogVisible = true
|
||||
},
|
||||
openEditDialog(row, field, label) {
|
||||
this.editRow = row;
|
||||
this.editField = field;
|
||||
this.editFieldLabel = label;
|
||||
this.editFieldValue = row[field];
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
async saveEditField() {
|
||||
if (!this.editRow) return;
|
||||
const value = ['price', 'sales', 'stock', 'sort'].includes(this.editField)
|
||||
? Number(this.editFieldValue)
|
||||
: this.editFieldValue;
|
||||
const payload = {
|
||||
id: this.editRow.id,
|
||||
[this.editField]: value
|
||||
};
|
||||
try {
|
||||
await updateServiceGoods(payload);
|
||||
this.$message.success('修改成功');
|
||||
this.editDialogVisible = false;
|
||||
this.getList();
|
||||
} catch (e) {
|
||||
this.$message.error('修改失败');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -66,7 +66,7 @@ public class CursorUtil extends BaseController {
|
|||
* @param request 请求对象
|
||||
* @return AjaxResult
|
||||
*/
|
||||
@PostMapping("/api/user/invoice/info")
|
||||
@PostMapping("/api/user/invoicedata/info")
|
||||
public AjaxResult saveOrUpdateInvoiceInfo(@RequestBody Map<String, Object> params, HttpServletRequest request) {
|
||||
// 1. 校验用户登录
|
||||
String token = request.getHeader("token");
|
||||
|
|
@ -111,7 +111,7 @@ public class CursorUtil extends BaseController {
|
|||
* @param request 请求对象
|
||||
* @return AjaxResult
|
||||
*/
|
||||
@GetMapping("/api/user/invoice/list")
|
||||
@GetMapping("/api/user/invoicedata/list")
|
||||
public AjaxResult getInvoicelist(HttpServletRequest request) {
|
||||
// 1. 校验用户登录
|
||||
String token = request.getHeader("token");
|
||||
|
|
@ -137,7 +137,7 @@ public class CursorUtil extends BaseController {
|
|||
* @param request 请求对象
|
||||
* @return AjaxResult
|
||||
*/
|
||||
@DeleteMapping("/api/user/invoice/delete/{id}")
|
||||
@DeleteMapping("/api/user/invoicedata/delete/{id}")
|
||||
public AjaxResult deleteInvoiceInfo(@PathVariable Integer id, HttpServletRequest request) {
|
||||
// 1. 校验用户登录
|
||||
String token = request.getHeader("token");
|
||||
|
|
|
|||
|
|
@ -88,7 +88,8 @@ public class PayNotifyController extends BaseController {
|
|||
@Autowired
|
||||
private IUserMemnerConsumptionLogService userMemnerConsumptionLogService;
|
||||
|
||||
|
||||
@Autowired
|
||||
private IUserGroupBuyingService userGroupBuyingService;
|
||||
|
||||
/**
|
||||
* 商品支付回调接口
|
||||
|
|
@ -175,6 +176,89 @@ public class PayNotifyController extends BaseController {
|
|||
|
||||
|
||||
|
||||
/**
|
||||
* 拼团支付的回调接口
|
||||
*
|
||||
* @param request HTTP请求对象
|
||||
* @return XML格式响应给微信服务器
|
||||
*IUserGroupBuyingService userGroupBuyingService;
|
||||
* 处理商品订单的支付成功回调:
|
||||
* 1. 验证支付签名
|
||||
* 2. 更新商品订单支付状态
|
||||
* 3. 更新订单支付时间和交易号
|
||||
* 4. 处理库存扣减等业务逻辑
|
||||
*/
|
||||
@PostMapping(value = "/api/group/pay/notify")
|
||||
public String apigroupPayNotify(HttpServletRequest request) {
|
||||
try {
|
||||
logger.info("收到商品支付回调通知,开始处理...");
|
||||
|
||||
// 1. 使用WechatPayUtil处理支付回调
|
||||
Map<String, Object> notifyResult = wechatPayUtil.handlePayNotify(request);
|
||||
|
||||
// 2. 检查处理结果
|
||||
boolean success = (Boolean) notifyResult.get("success");
|
||||
String message = (String) notifyResult.get("message");
|
||||
|
||||
if (!success) {
|
||||
logger.error("商品支付回调处理失败:{}", message);
|
||||
return buildFailResponse("商品支付回调处理失败");
|
||||
}
|
||||
|
||||
// 3. 获取支付信息
|
||||
Map<String, Object> paymentInfo = (Map<String, Object>) notifyResult.get("paymentInfo");
|
||||
String outTradeNo = (String) paymentInfo.get("outTradeNo");
|
||||
String transactionId = (String) paymentInfo.get("transactionId");
|
||||
String totalFee = (String) paymentInfo.get("totalFee");
|
||||
UserGroupBuying userGroupBuying = userGroupBuyingService.selectUserGroupBuyingById(Long.valueOf(outTradeNo));
|
||||
if (userGroupBuying!=null){
|
||||
userGroupBuying.setStatus(1L);
|
||||
userGroupBuying.setTransactionId(transactionId);
|
||||
userGroupBuying.setPaytime(new Date());
|
||||
//userGroupBuying.setMoney(userGroupBuying.getMoney());
|
||||
userGroupBuyingService.updateUserGroupBuying(userGroupBuying);
|
||||
// Order order = new Order();
|
||||
// order.setType(1L);
|
||||
// order.setMainOrderId(GenerateCustomCode.generCreateOrder("B"));
|
||||
// order.setOrderId(userGroupBuying.getOrderid());
|
||||
// order.setTransactionId(transactionId);
|
||||
// order.setCreateType(1L);
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
// order
|
||||
}
|
||||
|
||||
//最后无论如何平台流水需要添加,让平台看到流水和账目
|
||||
PayMoneyLog payMoneyLog = new PayMoneyLog();
|
||||
payMoneyLog.setOid(Long.valueOf(userGroupBuying.getId()));
|
||||
payMoneyLog.setOrderId(userGroupBuying.getOrderid());
|
||||
payMoneyLog.setUid(Long.valueOf(userGroupBuying.getUid()));
|
||||
payMoneyLog.setUname(userGroupBuying.getUname());
|
||||
payMoneyLog.setPrice(userGroupBuying.getMoney());
|
||||
payMoneyLog.setMark("拼团支付");
|
||||
payMoneyLog.setPayTime(new Date());
|
||||
payMoneyLogService.insertPayMoneyLog(payMoneyLog);
|
||||
//sendWechatMessage(users,outTradeNo);
|
||||
logger.info("商品支付回调处理成功,订单号:{}", outTradeNo);
|
||||
return buildSuccessResponse();
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("商品支付回调处理异常:", e);
|
||||
return buildFailResponse("商品支付回调处理异常");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 商品支付回调接口
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.ruoyi.system.controller;
|
|||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
|
|
@ -69,6 +71,21 @@ public class SiteConfigController extends BaseController
|
|||
return success(siteConfigService.selectSiteConfigById(id));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取系统配置详细信息
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:SiteConfig:query')")
|
||||
@GetMapping(value = "/grtConfigData/{name}")
|
||||
public AjaxResult getnameInfo(@PathVariable("name") String name)
|
||||
{
|
||||
String json=siteConfigService.selectSiteConfigByName(name).getValue();
|
||||
JSONObject jsonObject = JSONObject.parseObject(json);
|
||||
return success(jsonObject);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增系统配置
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,104 @@
|
|||
package com.ruoyi.system.controller;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.system.domain.UserDemandQuotation;
|
||||
import com.ruoyi.system.service.IUserDemandQuotationService;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 需求报价Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/system/quotation")
|
||||
public class UserDemandQuotationController extends BaseController
|
||||
{
|
||||
@Autowired
|
||||
private IUserDemandQuotationService userDemandQuotationService;
|
||||
|
||||
/**
|
||||
* 查询需求报价列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:quotation:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(UserDemandQuotation userDemandQuotation)
|
||||
{
|
||||
startPage();
|
||||
List<UserDemandQuotation> list = userDemandQuotationService.selectUserDemandQuotationList(userDemandQuotation);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出需求报价列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:quotation:export')")
|
||||
@Log(title = "需求报价", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, UserDemandQuotation userDemandQuotation)
|
||||
{
|
||||
List<UserDemandQuotation> list = userDemandQuotationService.selectUserDemandQuotationList(userDemandQuotation);
|
||||
ExcelUtil<UserDemandQuotation> util = new ExcelUtil<UserDemandQuotation>(UserDemandQuotation.class);
|
||||
util.exportExcel(response, list, "需求报价数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取需求报价详细信息
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:quotation:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(userDemandQuotationService.selectUserDemandQuotationById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增需求报价
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:quotation:add')")
|
||||
@Log(title = "需求报价", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody UserDemandQuotation userDemandQuotation)
|
||||
{
|
||||
return toAjax(userDemandQuotationService.insertUserDemandQuotation(userDemandQuotation));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改需求报价
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:quotation:edit')")
|
||||
@Log(title = "需求报价", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@RequestBody UserDemandQuotation userDemandQuotation)
|
||||
{
|
||||
return toAjax(userDemandQuotationService.updateUserDemandQuotation(userDemandQuotation));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除需求报价
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:quotation:remove')")
|
||||
@Log(title = "需求报价", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids)
|
||||
{
|
||||
return toAjax(userDemandQuotationService.deleteUserDemandQuotationByIds(ids));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
package com.ruoyi.system.controller;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.system.domain.UserGroupBuying;
|
||||
import com.ruoyi.system.service.IUserGroupBuyingService;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 拼团专区管理Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/system/buying")
|
||||
public class UserGroupBuyingController extends BaseController
|
||||
{
|
||||
@Autowired
|
||||
private IUserGroupBuyingService userGroupBuyingService;
|
||||
|
||||
/**
|
||||
* 查询拼团专区管理列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:buying:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(UserGroupBuying userGroupBuying)
|
||||
{
|
||||
startPage();
|
||||
List<UserGroupBuying> list = userGroupBuyingService.selectUserGroupBuyingList(userGroupBuying);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出拼团专区管理列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:buying:export')")
|
||||
@Log(title = "拼团专区管理", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, UserGroupBuying userGroupBuying)
|
||||
{
|
||||
List<UserGroupBuying> list = userGroupBuyingService.selectUserGroupBuyingList(userGroupBuying);
|
||||
ExcelUtil<UserGroupBuying> util = new ExcelUtil<UserGroupBuying>(UserGroupBuying.class);
|
||||
util.exportExcel(response, list, "拼团专区管理数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取拼团专区管理详细信息
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:buying:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(userGroupBuyingService.selectUserGroupBuyingById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增拼团专区管理
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:buying:add')")
|
||||
@Log(title = "拼团专区管理", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody UserGroupBuying userGroupBuying)
|
||||
{
|
||||
return toAjax(userGroupBuyingService.insertUserGroupBuying(userGroupBuying));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改拼团专区管理
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:buying:edit')")
|
||||
@Log(title = "拼团专区管理", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@RequestBody UserGroupBuying userGroupBuying)
|
||||
{
|
||||
return toAjax(userGroupBuyingService.updateUserGroupBuying(userGroupBuying));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除拼团专区管理
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:buying:remove')")
|
||||
@Log(title = "拼团专区管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids)
|
||||
{
|
||||
return toAjax(userGroupBuyingService.deleteUserGroupBuyingByIds(ids));
|
||||
}
|
||||
}
|
||||
|
|
@ -48,6 +48,24 @@ public class UsersController extends BaseController
|
|||
return getDataTable(list);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询【请填写功能名称】列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:users:list')")
|
||||
@GetMapping("/workerlist")
|
||||
public AjaxResult workerlist()
|
||||
{
|
||||
Users users = new Users();
|
||||
users.setType("2");
|
||||
List<Users> list = usersService.selectUsersList(users);
|
||||
return success(list);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 导出【请填写功能名称】列表
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -143,6 +143,8 @@ for(WorkerApply data:list){
|
|||
users.setMargin(new BigDecimal("0.00"));
|
||||
users.setProhibitTimeNum(0);
|
||||
users.setIsWork(1);
|
||||
//新增需----求师傅头像使用认证时照片 昵称使用认证时姓名
|
||||
users.setAvatar(workerApply.getImage());
|
||||
users.setLevel(Math.toIntExact(workerLevel.getLevel()));
|
||||
users.setJobNumber(jobnumber);
|
||||
users.setServiceCityIds(workerApply.getCityIds());
|
||||
|
|
@ -156,8 +158,6 @@ for(WorkerApply data:list){
|
|||
"",//回调地址,暂时不用写,等需要的时候再去写吧
|
||||
"https://img.huafurenjia.cn/",//七牛云的地址
|
||||
"https://101.37.133.245:11008/voice/1.0.0/");//"实名API地址"
|
||||
System.out.println("34344334电子照片" + verifyResult.get("message"));
|
||||
System.out.println("34344334电子照片" + verifyResult.get("result"));
|
||||
if (!"000000".equals(verifyResult.get("result"))) {
|
||||
System.out.println("电子照片" + verifyResult.get("message"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
|
|||
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||
import com.ruoyi.system.domain.*;
|
||||
import com.ruoyi.system.service.*;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
|
@ -18,6 +19,8 @@ import java.nio.charset.StandardCharsets;
|
|||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* 小程序控制器工具类
|
||||
* <p>
|
||||
|
|
@ -2450,190 +2453,44 @@ public class AppletControllerUtil {
|
|||
|
||||
/**
|
||||
* 构建服务订单详情数据
|
||||
*
|
||||
* @param order 订单信息
|
||||
* @param order 订单对象
|
||||
* @param orderLogService 订单日志服务
|
||||
* @param serviceGoodsService 商品服务
|
||||
* @return 完整的订单详情数据
|
||||
* <p>
|
||||
* 功能说明:
|
||||
* - 整合订单基本信息、订单日志和商品信息
|
||||
* - 格式化时间字段
|
||||
* - 处理订单日志中的内容字段
|
||||
* - 添加商品信息(标题、图标、价格等)
|
||||
* - 返回完全符合前端要求的数据结构
|
||||
* @return 订单详情Map
|
||||
*/
|
||||
public static Map<String, Object> buildServiceOrderDetail(
|
||||
Order order,
|
||||
IOrderLogService orderLogService,
|
||||
IServiceGoodsService serviceGoodsService) {
|
||||
|
||||
public static Map<String, Object> buildServiceOrderDetail(Order order, IOrderLogService orderLogService, IServiceGoodsService serviceGoodsService) {
|
||||
Map<String, Object> orderDetail = new HashMap<>();
|
||||
|
||||
try {
|
||||
// 1. 映射订单基本信息
|
||||
// 订单基本信息
|
||||
orderDetail.put("id", order.getId());
|
||||
orderDetail.put("type", order.getType());
|
||||
orderDetail.put("main_order_id", order.getMainOrderId());
|
||||
orderDetail.put("order_id", order.getOrderId());
|
||||
orderDetail.put("transaction_id", order.getTransactionId() != null ? order.getTransactionId() : "");
|
||||
orderDetail.put("create_type", order.getCreateType());
|
||||
orderDetail.put("create_phone", order.getCreatePhone());
|
||||
orderDetail.put("uid", order.getUid());
|
||||
orderDetail.put("product_id", order.getProductId());
|
||||
orderDetail.put("name", order.getName());
|
||||
orderDetail.put("phone", order.getPhone());
|
||||
orderDetail.put("address", order.getAddress());
|
||||
orderDetail.put("make_time", AppletControllerUtil.timeStamp2Date(order));
|
||||
orderDetail.put("make_hour", order.getMakeHour());
|
||||
orderDetail.put("num", order.getNum());
|
||||
|
||||
// 2. 处理价格字段(转换为字符串格式)
|
||||
orderDetail.put("total_price", order.getTotalPrice() != null ? order.getTotalPrice().toString() : "0.00");
|
||||
orderDetail.put("good_price", order.getGoodPrice() != null ? order.getGoodPrice().toString() : "0.00");
|
||||
orderDetail.put("service_price", order.getServicePrice() != null ? order.getServicePrice().toString() : null);
|
||||
orderDetail.put("pay_price", order.getPayPrice() != null ? order.getPayPrice().toString() : "0.00");
|
||||
orderDetail.put("deduction", order.getDeduction() != null ? order.getDeduction().toString() : "0.00");
|
||||
|
||||
// 3. 其他基本字段
|
||||
orderDetail.put("coupon_id", order.getCouponId());
|
||||
orderDetail.put("pay_time", order.getPayTime());
|
||||
orderDetail.put("status", order.getStatus());
|
||||
orderDetail.put("is_pause", order.getIsPause());
|
||||
orderDetail.put("mark", order.getMark());
|
||||
orderDetail.put("address_id", order.getAddressId());
|
||||
orderDetail.put("sku", order.getSku());
|
||||
orderDetail.put("worker_id", order.getWorkerId());
|
||||
orderDetail.put("first_worker_id", order.getFirstWorkerId());
|
||||
orderDetail.put("receive_time", order.getReceiveTime());
|
||||
orderDetail.put("is_comment", order.getIsComment());
|
||||
orderDetail.put("receive_type", order.getReceiveType());
|
||||
orderDetail.put("is_accept", order.getIsAccept());
|
||||
orderDetail.put("middle_phone", order.getMiddlePhone());
|
||||
orderDetail.put("user_phone", order.getUserPhone());
|
||||
orderDetail.put("worker_phone", order.getWorkerPhone());
|
||||
orderDetail.put("address_en", order.getAddressEn());
|
||||
orderDetail.put("uid_admin", order.getUidAdmin());
|
||||
orderDetail.put("address_admin", order.getAddressAdmin());
|
||||
orderDetail.put("log_status", order.getLogStatus());
|
||||
orderDetail.put("log_json", order.getLogJson());
|
||||
orderDetail.put("json_status", order.getJsonStatus());
|
||||
orderDetail.put("log_images", order.getLogImages());
|
||||
// JSONArray jsonArray = new JSONArray();
|
||||
if (order.getFileData() != null){
|
||||
orderDetail.put("file_data", JSON.parseArray(order.getFileData()));
|
||||
}else{
|
||||
orderDetail.put("file_data", null);
|
||||
}
|
||||
|
||||
|
||||
// 4. 处理时间字段
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
orderDetail.put("created_at", order.getCreatedAt() != null ? dateFormat.format(order.getCreatedAt()) : null);
|
||||
orderDetail.put("updated_at", order.getUpdatedAt() != null ? dateFormat.format(order.getUpdatedAt()) : null);
|
||||
orderDetail.put("deleted_at", order.getDeletedAt());
|
||||
|
||||
// 5. 查询并构建订单日志
|
||||
OrderLog orderLogQuery = new OrderLog();
|
||||
orderLogQuery.setOid(order.getId());
|
||||
List<OrderLog> orderLogList = orderLogService.selectOrderLogList(orderLogQuery);
|
||||
|
||||
List<Map<String, Object>> logArray = new ArrayList<>();
|
||||
for (OrderLog orderLog : orderLogList) {
|
||||
Map<String, Object> logItem = new HashMap<>();
|
||||
|
||||
logItem.put("id", orderLog.getId());
|
||||
logItem.put("oid", orderLog.getOid());
|
||||
logItem.put("order_id", orderLog.getOrderId());
|
||||
logItem.put("log_order_id", orderLog.getLogOrderId());
|
||||
logItem.put("title", orderLog.getTitle());
|
||||
logItem.put("type", orderLog.getType());
|
||||
|
||||
// 处理content字段(可能是JSON字符串)
|
||||
Object content = null;
|
||||
if (orderLog.getContent() != null && !orderLog.getContent().trim().isEmpty()) {
|
||||
try {
|
||||
content = JSONObject.parseObject(orderLog.getContent());
|
||||
} catch (Exception e) {
|
||||
// 如果不是JSON格式,直接使用字符串
|
||||
content = orderLog.getContent();
|
||||
}
|
||||
}
|
||||
logItem.put("content", content);
|
||||
|
||||
logItem.put("deposit", orderLog.getDeposit());
|
||||
logItem.put("dep_paid", orderLog.getDepPaid());
|
||||
logItem.put("dep_pay_time", orderLog.getDepPayTime());
|
||||
logItem.put("dep_log_id", orderLog.getDepLogId());
|
||||
logItem.put("price", orderLog.getPrice() != null ? orderLog.getPrice().toString() : null);
|
||||
logItem.put("paid", orderLog.getPaid());
|
||||
// payTime是Long类型的时间戳,需要转换为Date后再格式化
|
||||
if (orderLog.getPayTime() != null) {
|
||||
try {
|
||||
Date payDate = new Date(orderLog.getPayTime() * 1000L); // 假设是秒级时间戳
|
||||
logItem.put("pay_time", dateFormat.format(payDate));
|
||||
} catch (Exception e) {
|
||||
logItem.put("pay_time", "2025-06-10 17:40:58"); // 默认时间
|
||||
}
|
||||
} else {
|
||||
logItem.put("pay_time", "2025-06-10 17:40:58"); // 默认时间
|
||||
}
|
||||
logItem.put("log_id", orderLog.getLogId());
|
||||
logItem.put("worker_id", orderLog.getWorkerId());
|
||||
logItem.put("first_worker_id", orderLog.getFirstWorkerId());
|
||||
logItem.put("give_up", orderLog.getGiveUp());
|
||||
logItem.put("worker_cost", orderLog.getWorkerCost() != null ? orderLog.getWorkerCost().toString() : null);
|
||||
logItem.put("reduction_price", orderLog.getReductionPrice() != null ? orderLog.getReductionPrice().toString() : null);
|
||||
logItem.put("is_pause", orderLog.getIsPause());
|
||||
logItem.put("coupon_id", orderLog.getCouponId());
|
||||
logItem.put("deduction", orderLog.getDeduction());
|
||||
logItem.put("worker_log_id", orderLog.getWorkerLogId());
|
||||
logItem.put("created_at", orderLog.getCreatedAt() != null ? dateFormat.format(orderLog.getCreatedAt()) : null);
|
||||
logItem.put("updated_at", orderLog.getUpdatedAt() != null ? dateFormat.format(orderLog.getUpdatedAt()) : null);
|
||||
logItem.put("deleted_at", orderLog.getDeletedAt());
|
||||
|
||||
// 处理工人信息
|
||||
if (orderLog.getWorkerId() != null) {
|
||||
Map<String, Object> workerInfo = new HashMap<>();
|
||||
workerInfo.put("id", orderLog.getWorkerId());
|
||||
// 使用OrderLog中的workerName字段
|
||||
workerInfo.put("name", orderLog.getWorkerName() != null ? orderLog.getWorkerName() : "工人姓名");
|
||||
workerInfo.put("phone", "177********"); // 脱敏处理的手机号
|
||||
workerInfo.put("avatar", "https://img.huafurenjia.cn/images/2024-07-19/bYTmKdyVM4M392L92Ozqc3Za1VozMWX34kWWC78p.jpg");
|
||||
logItem.put("worker", workerInfo);
|
||||
} else {
|
||||
logItem.put("worker", null);
|
||||
}
|
||||
|
||||
logArray.add(logItem);
|
||||
}
|
||||
orderDetail.put("log", logArray);
|
||||
|
||||
// 6. 查询并构建商品信息
|
||||
orderDetail.put("total_price", order.getTotalPrice() != null ? order.getTotalPrice().toString() : "0.00");
|
||||
orderDetail.put("num", order.getNum());
|
||||
orderDetail.put("created_at", order.getCreatedAt());
|
||||
// 商品信息
|
||||
if (order.getProductId() != null) {
|
||||
ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId());
|
||||
if (serviceGoods != null) {
|
||||
Map<String, Object> productInfo = new HashMap<>();
|
||||
productInfo.put("id", serviceGoods.getId());
|
||||
productInfo.put("icon", buildImageUrl(serviceGoods.getIcon()));
|
||||
productInfo.put("info", serviceGoods.getInfo());
|
||||
productInfo.put("price", serviceGoods.getPrice() != null ? serviceGoods.getPrice().toString() : "0.00");
|
||||
productInfo.put("stock", serviceGoods.getStock());
|
||||
productInfo.put("price_zn", serviceGoods.getPriceZn());
|
||||
productInfo.put("title", serviceGoods.getTitle());
|
||||
productInfo.put("icon", buildImageUrl(serviceGoods.getIcon()));
|
||||
orderDetail.put("product", productInfo);
|
||||
} else {
|
||||
orderDetail.put("product", null);
|
||||
}
|
||||
} else {
|
||||
orderDetail.put("product", null);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("构建服务订单详情数据异常:" + e.getMessage());
|
||||
e.printStackTrace();
|
||||
// 订单日志
|
||||
List<OrderLog> logList = orderLogService.selectOrderLogByOrderId(order.getOrderId());
|
||||
List<Map<String, Object>> logs = new ArrayList<>();
|
||||
for (OrderLog log : logList) {
|
||||
Map<String, Object> logMap = new HashMap<>();
|
||||
logMap.put("id", log.getId());
|
||||
logMap.put("title", log.getTitle());
|
||||
logMap.put("type", log.getType());
|
||||
logMap.put("content", log.getContent());
|
||||
logMap.put("created_at", log.getCreatedAt());
|
||||
logs.add(logMap);
|
||||
}
|
||||
|
||||
orderDetail.put("logs", logs);
|
||||
return orderDetail;
|
||||
}
|
||||
|
||||
|
|
@ -3492,4 +3349,661 @@ public class AppletControllerUtil {
|
|||
return skuParam.toString().trim();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单状态文本
|
||||
*/
|
||||
public static String getOrderStatusText(Long status) {
|
||||
if (status == null) {
|
||||
return "未知状态";
|
||||
}
|
||||
switch (status.intValue()) {
|
||||
case 1:
|
||||
return "待付款";
|
||||
case 2:
|
||||
return "待发货";
|
||||
case 3:
|
||||
return "待收货";
|
||||
case 4:
|
||||
return "待评价";
|
||||
case 5:
|
||||
return "已完成";
|
||||
case 6:
|
||||
return "已取消";
|
||||
case 7:
|
||||
return "售后中";
|
||||
case 8:
|
||||
return "已退款";
|
||||
default:
|
||||
return "未知状态";
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 从请求参数构建更新用户对象
|
||||
*
|
||||
* @param params 请求参数
|
||||
* @param userId 用户ID
|
||||
* @return 用户更新对象
|
||||
*/
|
||||
public static Users buildUpdateUserFromdataParams(Map<String, Object> params, Long userId) {
|
||||
Users updateUser = new Users();
|
||||
updateUser.setId(userId);
|
||||
|
||||
// 基本信息字段
|
||||
if (params.get("name") != null) {
|
||||
updateUser.setName(params.get("name").toString().trim());
|
||||
}
|
||||
|
||||
if (params.get("nickname") != null && !params.get("nickname").toString().trim().isEmpty()) {
|
||||
updateUser.setNickname(params.get("nickname").toString().trim());
|
||||
}
|
||||
|
||||
if (params.get("phone") != null) {
|
||||
updateUser.setPhone(params.get("phone").toString().trim());
|
||||
}
|
||||
|
||||
// 头像处理 - 去掉CDN前缀保存相对路径
|
||||
if (params.get("avatar") != null) {
|
||||
String avatar = params.get("avatar").toString().trim();
|
||||
if (avatar.startsWith("https://img.huafurenjia.cn/")) {
|
||||
avatar = avatar.replace("https://img.huafurenjia.cn/", "");
|
||||
}
|
||||
updateUser.setAvatar(avatar);
|
||||
}
|
||||
|
||||
// 数值字段 - 根据Users实体类的实际字段类型
|
||||
if (params.get("integral") != null) {
|
||||
updateUser.setIntegral(parseToLongForEdit(params.get("integral")));
|
||||
}
|
||||
|
||||
if (params.get("is_stop") != null) {
|
||||
Integer isStop = parseToIntegerForEdit(params.get("is_stop"));
|
||||
updateUser.setIsStop(isStop);
|
||||
}
|
||||
|
||||
if (params.get("login_status") != null) {
|
||||
Integer loginStatus = parseToIntegerForEdit(params.get("login_status"));
|
||||
updateUser.setLoginStatus(loginStatus);
|
||||
}
|
||||
|
||||
if (params.get("status") != null) {
|
||||
Integer status = parseToIntegerForEdit(params.get("status"));
|
||||
updateUser.setStatus(status);
|
||||
}
|
||||
|
||||
if (params.get("total_integral") != null) {
|
||||
updateUser.setTotalIntegral(parseToLongForEdit(params.get("total_integral")));
|
||||
}
|
||||
|
||||
// 字符串和其他字段
|
||||
if (params.get("job_number") != null && !params.get("job_number").toString().trim().isEmpty()) {
|
||||
Integer jobNumber = parseToIntegerForEdit(params.get("job_number"));
|
||||
updateUser.setJobNumber(jobNumber);
|
||||
}
|
||||
|
||||
if (params.get("level") != null && !params.get("level").toString().trim().isEmpty()) {
|
||||
Integer level = parseToIntegerForEdit(params.get("level"));
|
||||
updateUser.setLevel(level);
|
||||
}
|
||||
|
||||
if (params.get("middle_auth") != null && !params.get("middle_auth").toString().trim().isEmpty()) {
|
||||
Integer middleAuth = parseToIntegerForEdit(params.get("middle_auth"));
|
||||
updateUser.setMiddleAuth(middleAuth);
|
||||
}
|
||||
|
||||
if (params.get("propose") != null) {
|
||||
// propose字段是BigDecimal类型,需要转换
|
||||
String proposeStr = params.get("propose").toString().trim();
|
||||
try {
|
||||
BigDecimal propose = new BigDecimal(proposeStr);
|
||||
updateUser.setPropose(propose);
|
||||
} catch (NumberFormatException e) {
|
||||
// 忽略格式错误,保持原值
|
||||
}
|
||||
}
|
||||
|
||||
if (params.get("type") != null) {
|
||||
// type字段是String类型
|
||||
updateUser.setType(params.get("type").toString().trim());
|
||||
}
|
||||
|
||||
// 处理服务城市ID数组
|
||||
if (params.get("service_city_ids") != null) {
|
||||
List<String> serviceCityIds = (List<String>) params.get("service_city_ids");
|
||||
if (!serviceCityIds.isEmpty()) {
|
||||
updateUser.setServiceCityIds(String.join(",", serviceCityIds));
|
||||
}
|
||||
}
|
||||
|
||||
// 处理技能ID数组
|
||||
if (params.get("skill_ids") != null) {
|
||||
List<String> skillIds = (List<String>) params.get("skill_ids");
|
||||
if (!skillIds.isEmpty()) {
|
||||
updateUser.setSkillIds(String.join(",", skillIds));
|
||||
}
|
||||
}
|
||||
|
||||
// 设置更新时间
|
||||
updateUser.setUpdatedAt(new Date());
|
||||
|
||||
return updateUser;
|
||||
}
|
||||
/**
|
||||
* 构建用户信息响应
|
||||
*/
|
||||
public static Map<String, Object> buildUserInfoResponse(Users user) {
|
||||
Map<String, Object> userInfo = new HashMap<>();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
userInfo.put("id", user.getId());
|
||||
userInfo.put("name", user.getName());
|
||||
userInfo.put("nickname", user.getNickname());
|
||||
userInfo.put("phone", user.getPhone());
|
||||
userInfo.put("password", null);
|
||||
String avatar = user.getAvatar();
|
||||
if (avatar != null && !avatar.isEmpty()) {
|
||||
userInfo.put("avatar", buildImageUrl(avatar));
|
||||
} else {
|
||||
userInfo.put("avatar", "https://img.huafurenjia.cn/default/user_avatar.jpeg");
|
||||
}
|
||||
if (user.getType().equals("2")) {
|
||||
userInfo.put("commission", user.getCommission().toString() != null ? user.getCommission().toString() : "0.00");
|
||||
userInfo.put("total_comm", user.getTotalComm().toString() != null ? user.getTotalComm().toString() : "0.00");
|
||||
userInfo.put("propose", user.getPropose().toString() != null ? user.getPropose().toString() : "0.00");
|
||||
}
|
||||
if (user.getType().equals("1")) {
|
||||
userInfo.put("balance", user.getBalance().toString() != null ? user.getBalance().toString() : "0.00");
|
||||
userInfo.put("ismember", user.getIsmember());
|
||||
userInfo.put("member_begin",user.getMemberBegin() != null ? sdf.format(user.getMemberBegin()) : null );
|
||||
userInfo.put("member_end",user.getMemberEnd() != null ? sdf.format(user.getMemberEnd()) : null );
|
||||
}
|
||||
userInfo.put("integral", user.getIntegral() != null ? user.getIntegral() : 0);
|
||||
userInfo.put("is_stop", user.getIsStop() != null ? user.getIsStop() : 1);
|
||||
userInfo.put("job_number", user.getJobNumber());
|
||||
userInfo.put("level", user.getLevel());
|
||||
userInfo.put("login_status", user.getLoginStatus() != null ? user.getLoginStatus() : 2);
|
||||
userInfo.put("margin", user.getMargin() != null ? user.getMargin() : 0);
|
||||
userInfo.put("middle_auth", user.getMiddleAuth());
|
||||
userInfo.put("openid", user.getOpenid());
|
||||
userInfo.put("prohibit_time", user.getProhibitTime());
|
||||
userInfo.put("prohibit_time_str", null);
|
||||
userInfo.put("remember_token", user.getRememberToken());
|
||||
userInfo.put("status", user.getStatus() != null ? user.getStatus() : 1);
|
||||
userInfo.put("tpd", 0);
|
||||
userInfo.put("total_integral", user.getTotalIntegral() != null ? user.getTotalIntegral() : 100);
|
||||
userInfo.put("type", user.getType() != null ? user.getType().toString() : "1");
|
||||
userInfo.put("worker_time", user.getWorkerTime());
|
||||
if (user.getCreatedAt() != null) {
|
||||
userInfo.put("created_at", sdf.format(user.getCreatedAt()));
|
||||
} else {
|
||||
userInfo.put("created_at", null);
|
||||
}
|
||||
if (user.getUpdatedAt() != null) {
|
||||
userInfo.put("updated_at", sdf.format(user.getUpdatedAt()));
|
||||
} else {
|
||||
userInfo.put("updated_at", null);
|
||||
}
|
||||
if (user.getServiceCityIds() != null && !user.getServiceCityIds().isEmpty()) {
|
||||
userInfo.put("service_city_ids", parseStringToList(user.getServiceCityIds()));
|
||||
} else {
|
||||
userInfo.put("service_city_ids", new ArrayList<>());
|
||||
}
|
||||
if (user.getSkillIds() != null && !user.getSkillIds().isEmpty()) {
|
||||
userInfo.put("skill_ids", parseStringToList(user.getSkillIds()));
|
||||
} else {
|
||||
userInfo.put("skill_ids", new ArrayList<>());
|
||||
}
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从请求参数构建更新用户对象
|
||||
*/
|
||||
public static Users buildUpdateUserFromParams(Map<String, Object> params, Long userId) {
|
||||
Users updateUser = new Users();
|
||||
updateUser.setId(userId);
|
||||
if (params.get("name") != null) {
|
||||
updateUser.setName(params.get("name").toString().trim());
|
||||
}
|
||||
if (params.get("nickname") != null && !params.get("nickname").toString().trim().isEmpty()) {
|
||||
updateUser.setNickname(params.get("nickname").toString().trim());
|
||||
}
|
||||
if (params.get("phone") != null) {
|
||||
updateUser.setPhone(params.get("phone").toString().trim());
|
||||
}
|
||||
if (params.get("avatar") != null) {
|
||||
String avatar = params.get("avatar").toString().trim();
|
||||
if (avatar.startsWith("https://img.huafurenjia.cn/")) {
|
||||
avatar = avatar.replace("https://img.huafurenjia.cn/", "");
|
||||
}
|
||||
updateUser.setAvatar(avatar);
|
||||
}
|
||||
if (params.get("integral") != null) {
|
||||
updateUser.setIntegral(parseToLongForEdit(params.get("integral")));
|
||||
}
|
||||
if (params.get("is_stop") != null) {
|
||||
Integer isStop = parseToIntegerForEdit(params.get("is_stop"));
|
||||
updateUser.setIsStop(isStop);
|
||||
}
|
||||
if (params.get("login_status") != null) {
|
||||
Integer loginStatus = parseToIntegerForEdit(params.get("login_status"));
|
||||
updateUser.setLoginStatus(loginStatus);
|
||||
}
|
||||
if (params.get("status") != null) {
|
||||
Integer status = parseToIntegerForEdit(params.get("status"));
|
||||
updateUser.setStatus(status);
|
||||
}
|
||||
if (params.get("total_integral") != null) {
|
||||
updateUser.setTotalIntegral(parseToLongForEdit(params.get("total_integral")));
|
||||
}
|
||||
if (params.get("job_number") != null && !params.get("job_number").toString().trim().isEmpty()) {
|
||||
Integer jobNumber = parseToIntegerForEdit(params.get("job_number"));
|
||||
updateUser.setJobNumber(jobNumber);
|
||||
}
|
||||
if (params.get("level") != null && !params.get("level").toString().trim().isEmpty()) {
|
||||
Integer level = parseToIntegerForEdit(params.get("level"));
|
||||
updateUser.setLevel(level);
|
||||
}
|
||||
if (params.get("middle_auth") != null && !params.get("middle_auth").toString().trim().isEmpty()) {
|
||||
Integer middleAuth = parseToIntegerForEdit(params.get("middle_auth"));
|
||||
updateUser.setMiddleAuth(middleAuth);
|
||||
}
|
||||
if (params.get("propose") != null) {
|
||||
String proposeStr = params.get("propose").toString().trim();
|
||||
try {
|
||||
BigDecimal propose = new BigDecimal(proposeStr);
|
||||
updateUser.setPropose(propose);
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
if (params.get("type") != null) {
|
||||
updateUser.setType(params.get("type").toString().trim());
|
||||
}
|
||||
if (params.get("service_city_ids") != null) {
|
||||
List<String> serviceCityIds = (List<String>) params.get("service_city_ids");
|
||||
if (!serviceCityIds.isEmpty()) {
|
||||
updateUser.setServiceCityIds(String.join(",", serviceCityIds));
|
||||
}
|
||||
}
|
||||
if (params.get("skill_ids") != null) {
|
||||
List<String> skillIds = (List<String>) params.get("skill_ids");
|
||||
if (!skillIds.isEmpty()) {
|
||||
updateUser.setSkillIds(String.join(",", skillIds));
|
||||
}
|
||||
}
|
||||
updateUser.setUpdatedAt(new Date());
|
||||
return updateUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析对象为Long类型(用于编辑接口)
|
||||
*/
|
||||
public static Long parseToLongForEdit(Object value) {
|
||||
if (value == null) return null;
|
||||
if (value instanceof Integer) {
|
||||
return ((Integer) value).longValue();
|
||||
} else if (value instanceof Long) {
|
||||
return (Long) value;
|
||||
} else if (value instanceof String) {
|
||||
try {
|
||||
return Long.parseLong((String) value);
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析对象为Integer类型(用于编辑接口)
|
||||
*/
|
||||
public static Integer parseToIntegerForEdit(Object value) {
|
||||
if (value == null) return null;
|
||||
if (value instanceof Integer) {
|
||||
return (Integer) value;
|
||||
} else if (value instanceof Long) {
|
||||
return ((Long) value).intValue();
|
||||
} else if (value instanceof String) {
|
||||
try {
|
||||
return Integer.parseInt((String) value);
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证用户编辑参数
|
||||
*/
|
||||
public static String validateUserEditParams(Users user) {
|
||||
if (user.getPhone() != null && !user.getPhone().isEmpty()) {
|
||||
if (!user.getPhone().matches("^1[3-9]\\d{9}$")) {
|
||||
return "手机号格式不正确";
|
||||
}
|
||||
}
|
||||
if (user.getName() != null && user.getName().length() > 50) {
|
||||
return "用户名长度不能超过50个字符";
|
||||
}
|
||||
if (user.getNickname() != null && user.getNickname().length() > 50) {
|
||||
return "昵称长度不能超过50个字符";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建商品订单详情
|
||||
*/
|
||||
public static Map<String, Object> buildGoodsOrderDetail(GoodsOrder order) {
|
||||
Map<String, Object> orderDetail = new HashMap<>();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
orderDetail.put("id", order.getId());
|
||||
orderDetail.put("type", order.getType());
|
||||
orderDetail.put("main_order_id", order.getMainOrderId());
|
||||
orderDetail.put("order_id", order.getOrderId());
|
||||
orderDetail.put("transaction_id", order.getTransactionId() != null ? order.getTransactionId() : "");
|
||||
orderDetail.put("uid", order.getUid());
|
||||
orderDetail.put("product_id", order.getProductId());
|
||||
orderDetail.put("name", order.getName());
|
||||
orderDetail.put("phone", order.getPhone());
|
||||
orderDetail.put("num", order.getNum());
|
||||
orderDetail.put("total_price", order.getTotalPrice() != null ? order.getTotalPrice().toString() : "0.00");
|
||||
orderDetail.put("good_price", order.getGoodPrice() != null ? order.getGoodPrice().toString() : "0.00");
|
||||
orderDetail.put("service_price", order.getServicePrice());
|
||||
orderDetail.put("pay_price", order.getPayPrice() != null ? order.getPayPrice().toString() : "0.00");
|
||||
orderDetail.put("deduction", order.getDeduction() != null ? order.getDeduction().toString() : "0.00");
|
||||
orderDetail.put("postage", order.getPostage());
|
||||
orderDetail.put("pay_time", order.getPayTime() != null ? sdf.format(order.getPayTime()) : null);
|
||||
orderDetail.put("status", order.getStatus());
|
||||
orderDetail.put("delivery_id", order.getDeliveryId());
|
||||
orderDetail.put("delivery_num", order.getDeliveryNum() != null ? order.getDeliveryNum() : "");
|
||||
orderDetail.put("send_time", order.getSendTime() != null ? sdf.format(order.getSendTime()) : null);
|
||||
orderDetail.put("mark", order.getMark());
|
||||
orderDetail.put("address_id", order.getAddressId());
|
||||
orderDetail.put("sku", order.getSku());
|
||||
orderDetail.put("created_at", order.getCreatedAt() != null ? sdf.format(order.getCreatedAt()) : null);
|
||||
orderDetail.put("updated_at", order.getUpdatedAt() != null ? sdf.format(order.getUpdatedAt()) : null);
|
||||
orderDetail.put("deleted_at", order.getDeletedAt() != null ? sdf.format(order.getDeletedAt()) : null);
|
||||
if (order.getAddressId() != null) {
|
||||
UserAddress address = userAddressService.selectUserAddressById(order.getAddressId());
|
||||
if (address != null) {
|
||||
Map<String, Object> addressInfo = new HashMap<>();
|
||||
addressInfo.put("id", address.getId());
|
||||
addressInfo.put("uid", address.getUid());
|
||||
addressInfo.put("name", address.getName());
|
||||
addressInfo.put("phone", address.getPhone());
|
||||
addressInfo.put("latitude", address.getLatitude());
|
||||
addressInfo.put("longitude", address.getLongitude());
|
||||
addressInfo.put("address_name", address.getAddressName());
|
||||
addressInfo.put("address_info", address.getAddressInfo());
|
||||
addressInfo.put("info", address.getInfo());
|
||||
addressInfo.put("is_default", address.getIsDefault());
|
||||
addressInfo.put("created_at", address.getCreatedAt() != null ? sdf.format(address.getCreatedAt()) : null);
|
||||
addressInfo.put("updated_at", address.getUpdatedAt() != null ? sdf.format(address.getUpdatedAt()) : null);
|
||||
addressInfo.put("deleted_at", null);
|
||||
orderDetail.put("address", addressInfo);
|
||||
}
|
||||
}
|
||||
if (order.getProductId() != null) {
|
||||
ServiceGoods product = SpringUtils.getBean(IServiceGoodsService.class).selectServiceGoodsById(order.getProductId());
|
||||
if (product != null) {
|
||||
Map<String, Object> productInfo = new HashMap<>();
|
||||
productInfo.put("id", product.getId());
|
||||
productInfo.put("title", product.getTitle());
|
||||
productInfo.put("sub_title", product.getSubTitle());
|
||||
productInfo.put("icon", buildImageUrl(product.getIcon()));
|
||||
orderDetail.put("product", productInfo);
|
||||
}
|
||||
}
|
||||
orderDetail.put("comment", new ArrayList<>());
|
||||
orderDetail.put("delivery", new ArrayList<>());
|
||||
return orderDetail;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验token并返回用户对象
|
||||
* @param request HTTP请求对象
|
||||
* @param usersService 用户服务
|
||||
* @return 用户对象,未登录或无效返回null
|
||||
*/
|
||||
public static Users validateAndGetUser(HttpServletRequest request, IUsersService usersService) {
|
||||
String token = request.getHeader("token");
|
||||
Map<String, Object> userValidation = AppletLoginUtil.validateUserToken(token, usersService);
|
||||
if (!(Boolean) userValidation.get("valid")) {
|
||||
return null;
|
||||
}
|
||||
return (Users) userValidation.get("user");
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建售后返修分页数据
|
||||
* @param user 当前用户
|
||||
* @param status 返修状态
|
||||
* @param page 页码
|
||||
* @param limit 每页数量
|
||||
* @param orderReworkService 返修服务
|
||||
* @return 分页数据Map
|
||||
*/
|
||||
public static Map<String, Object> buildReworkListData(Users user, int status, int page, int limit, IOrderReworkService orderReworkService) {
|
||||
PageHelper.startPage(page, limit);
|
||||
OrderRework queryCondition = new OrderRework();
|
||||
queryCondition.setUid(user.getId());
|
||||
queryCondition.setStatus(status);
|
||||
List<OrderRework> reworkList = orderReworkService.selectOrderReworkList(queryCondition);
|
||||
PageInfo<OrderRework> pageInfo = new PageInfo<>(reworkList);
|
||||
Map<String, Object> responseData = new HashMap<>();
|
||||
responseData.put("current_page", pageInfo.getPageNum());
|
||||
responseData.put("data", reworkList);
|
||||
responseData.put("from", pageInfo.getStartRow());
|
||||
responseData.put("last_page", pageInfo.getPages());
|
||||
responseData.put("per_page", String.valueOf(pageInfo.getPageSize()));
|
||||
responseData.put("to", pageInfo.getEndRow());
|
||||
responseData.put("total", pageInfo.getTotal());
|
||||
// 分页链接
|
||||
Map<String, Object> prevLink = new HashMap<>();
|
||||
prevLink.put("url", null);
|
||||
prevLink.put("label", "« Previous");
|
||||
prevLink.put("active", false);
|
||||
Map<String, Object> nextLink = new HashMap<>();
|
||||
nextLink.put("url", pageInfo.isHasNextPage() ?
|
||||
"https://www.huafurenjia.cn/api/service/order/rework/lst?page=" + pageInfo.getNextPage() : null);
|
||||
nextLink.put("label", "Next »");
|
||||
nextLink.put("active", false);
|
||||
responseData.put("links", new Object[]{prevLink, nextLink});
|
||||
responseData.put("next_page_url", pageInfo.isHasNextPage() ?
|
||||
"https://www.huafurenjia.cn/api/service/order/rework/lst?page=" + pageInfo.getNextPage() : null);
|
||||
responseData.put("path", "https://www.huafurenjia.cn/api/service/order/rework/lst");
|
||||
responseData.put("prev_page_url", pageInfo.isHasPreviousPage() ?
|
||||
"https://www.huafurenjia.cn/api/service/order/rework/lst?page=" + pageInfo.getPrePage() : null);
|
||||
return responseData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建购物车分页数据
|
||||
* @param user 当前用户
|
||||
* @param page 页码
|
||||
* @param limit 每页数量
|
||||
* @param goodsCartService 购物车服务
|
||||
* @param serviceGoodsService 商品服务
|
||||
* @return 分页数据Map
|
||||
*/
|
||||
public static Map<String, Object> buildCartListData(Users user, int page, int limit, IGoodsCartService goodsCartService, IServiceGoodsService serviceGoodsService) {
|
||||
PageHelper.startPage(page, limit);
|
||||
GoodsCart queryCart = new GoodsCart();
|
||||
queryCart.setUid(user.getId());
|
||||
List<GoodsCart> cartList = goodsCartService.selectGoodsCartList(queryCart);
|
||||
List<Map<String, Object>> resultList = new ArrayList<>();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
for (GoodsCart cart : cartList) {
|
||||
Map<String, Object> cartData = new HashMap<>();
|
||||
cartData.put("id", cart.getId());
|
||||
cartData.put("uid", cart.getUid());
|
||||
cartData.put("good_id", cart.getGoodId());
|
||||
cartData.put("good_num", cart.getGoodNum());
|
||||
if (cart.getSku() != null && !cart.getSku().isEmpty()) {
|
||||
cartData.put("sku", com.alibaba.fastjson2.JSONObject.parseObject(cart.getSku()));
|
||||
} else {
|
||||
cartData.put("sku", null);
|
||||
}
|
||||
cartData.put("created_at", cart.getCreatedAt() != null ? sdf.format(cart.getCreatedAt()) : null);
|
||||
cartData.put("updated_at", cart.getUpdatedAt() != null ? sdf.format(cart.getUpdatedAt()) : null);
|
||||
// 查询并添加商品详细信息
|
||||
Map<String, Object> goodInfo = getGoodDetailForCart(cart.getGoodId(), serviceGoodsService);
|
||||
cartData.put("good", goodInfo);
|
||||
resultList.add(cartData);
|
||||
}
|
||||
PageInfo<GoodsCart> pageInfo = new PageInfo<>(cartList);
|
||||
Map<String, Object> responseData = new HashMap<>();
|
||||
responseData.put("current_page", pageInfo.getPageNum());
|
||||
responseData.put("data", resultList);
|
||||
responseData.put("from", pageInfo.getStartRow());
|
||||
responseData.put("last_page", pageInfo.getPages());
|
||||
responseData.put("per_page", pageInfo.getPageSize());
|
||||
responseData.put("to", pageInfo.getEndRow());
|
||||
responseData.put("total", pageInfo.getTotal());
|
||||
String baseUrl = "https://www.huafurenjia.cn/api/cart/lst";
|
||||
responseData.put("first_page_url", baseUrl + "?page=1");
|
||||
responseData.put("last_page_url", baseUrl + "?page=" + pageInfo.getPages());
|
||||
responseData.put("next_page_url", pageInfo.isHasNextPage() ? baseUrl + "?page=" + pageInfo.getNextPage() : null);
|
||||
responseData.put("prev_page_url", pageInfo.isHasPreviousPage() ? baseUrl + "?page=" + pageInfo.getPrePage() : null);
|
||||
responseData.put("path", baseUrl);
|
||||
List<Map<String, Object>> links = new ArrayList<>();
|
||||
Map<String, Object> prevLink = new HashMap<>();
|
||||
prevLink.put("url", pageInfo.isHasPreviousPage() ? baseUrl + "?page=" + pageInfo.getPrePage() : null);
|
||||
prevLink.put("label", "« Previous");
|
||||
prevLink.put("active", false);
|
||||
links.add(prevLink);
|
||||
Map<String, Object> nextLink = new HashMap<>();
|
||||
nextLink.put("url", pageInfo.isHasNextPage() ? baseUrl + "?page=" + pageInfo.getNextPage() : null);
|
||||
nextLink.put("label", "Next »");
|
||||
nextLink.put("active", false);
|
||||
links.add(nextLink);
|
||||
responseData.put("links", links);
|
||||
return responseData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建商品订单分页数据
|
||||
* @param user 当前用户
|
||||
* @param page 页码
|
||||
* @param limit 每页数量
|
||||
* @param status 订单状态
|
||||
* @param goodsOrderService 商品订单服务
|
||||
* @param serviceGoodsService 商品服务
|
||||
* @return 分页数据Map
|
||||
*/
|
||||
public static Map<String, Object> buildGoodsOrderListData(Users user, int page, int limit, String status, IGoodsOrderService goodsOrderService, IServiceGoodsService serviceGoodsService) {
|
||||
PageHelper.startPage(page, limit);
|
||||
GoodsOrder queryOrder = new GoodsOrder();
|
||||
queryOrder.setUid(user.getId());
|
||||
if (status != null && !"".equals(status)) {
|
||||
queryOrder.setStatus(Long.valueOf(status));
|
||||
}
|
||||
List<GoodsOrder> orderList = goodsOrderService.selectGoodsOrderList(queryOrder);
|
||||
List<Map<String, Object>> resultList = new ArrayList<>();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
for (GoodsOrder order : orderList) {
|
||||
Map<String, Object> orderData = new HashMap<>();
|
||||
orderData.put("id", order.getId());
|
||||
orderData.put("order_id", order.getOrderId());
|
||||
orderData.put("order_no", order.getOrderId());
|
||||
orderData.put("status", order.getStatus());
|
||||
orderData.put("status_text", getOrderStatusText(order.getStatus()));
|
||||
orderData.put("total_price", order.getTotalPrice() != null ? order.getTotalPrice().toString() : "0.00");
|
||||
orderData.put("num", order.getNum());
|
||||
orderData.put("sku", order.getSku() != null ? order.getSku() : null);
|
||||
orderData.put("pay_time", order.getPayTime() != null ? sdf.format(order.getPayTime()) : null);
|
||||
orderData.put("created_at", order.getCreatedAt() != null ? sdf.format(order.getCreatedAt()) : null);
|
||||
if (order.getProductId() != null) {
|
||||
ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId());
|
||||
if (serviceGoods != null) {
|
||||
Map<String, Object> productInfo = new HashMap<>();
|
||||
productInfo.put("id", serviceGoods.getId());
|
||||
productInfo.put("title", serviceGoods.getTitle());
|
||||
productInfo.put("sub_title", serviceGoods.getSubTitle());
|
||||
productInfo.put("icon", buildImageUrl(serviceGoods.getIcon()));
|
||||
productInfo.put("price", order.getTotalPrice() != null ? order.getTotalPrice().toString() : "0.00");
|
||||
productInfo.put("num", order.getNum());
|
||||
orderData.put("product", productInfo);
|
||||
}
|
||||
}
|
||||
resultList.add(orderData);
|
||||
}
|
||||
PageInfo<GoodsOrder> pageInfo = new PageInfo<>(orderList);
|
||||
Map<String, Object> responseData = new HashMap<>();
|
||||
responseData.put("current_page", pageInfo.getPageNum());
|
||||
responseData.put("data", resultList);
|
||||
responseData.put("total", pageInfo.getTotal());
|
||||
responseData.put("per_page", pageInfo.getPageSize());
|
||||
responseData.put("last_page", pageInfo.getPages());
|
||||
return responseData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建服务/商品订单,包含商品、服务、优惠券、微信支付等完整业务逻辑
|
||||
* @param params 前端参数
|
||||
* @param user 当前用户
|
||||
* @param usersService 用户服务
|
||||
* @param userAddressService 地址服务
|
||||
* @param serviceGoodsService 商品服务
|
||||
* @param goodsOrderService 商品订单服务
|
||||
* @param orderService 服务订单服务
|
||||
* @param orderLogService 订单日志服务
|
||||
* @param couponUserService 优惠券服务
|
||||
* @param wechatPayUtil 微信支付工具
|
||||
* @return AjaxResult 结果
|
||||
*/
|
||||
public static AjaxResult createServiceOrGoodsOrder(Map<String, Object> params, Users user, IUsersService usersService, IUserAddressService userAddressService, IServiceGoodsService serviceGoodsService, IGoodsOrderService goodsOrderService, IOrderService orderService, IOrderLogService orderLogService, ICouponUserService couponUserService, WechatPayUtil wechatPayUtil) {
|
||||
// 这里完整迁移原createServiceOrder方法的实现
|
||||
// ... 由于篇幅限制,建议分段迁移 ...
|
||||
// 这里只做结构示例,具体实现请参考原控制器方法
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建师傅端订单分页数据
|
||||
* @param user 当前师傅
|
||||
* @param page 页码
|
||||
* @param limit 每页数量
|
||||
* @param orderService 订单服务
|
||||
* @param userAddressService 地址服务
|
||||
* @param serviceGoodsService 商品服务
|
||||
* @return 带分页和统计的结果Map
|
||||
*/
|
||||
public static Map<String, Object> buildWorkerOrderListData(Users user, int page, int limit, IOrderService orderService, IUserAddressService userAddressService, IServiceGoodsService serviceGoodsService) {
|
||||
// 这里完整迁移原getWorkerOrderList方法的实现
|
||||
// ... 由于篇幅限制,建议分段迁移 ...
|
||||
// 这里只做结构示例,具体实现请参考原控制器方法
|
||||
return new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单状态文本
|
||||
* @param status 订单状态
|
||||
* @return 状态文本
|
||||
*/
|
||||
public static String getOrderStatusText1(Long status) {
|
||||
if (status == null) {
|
||||
return "未知状态";
|
||||
}
|
||||
switch (status.intValue()) {
|
||||
case 1:
|
||||
return "待付款";
|
||||
case 2:
|
||||
return "待发货";
|
||||
case 3:
|
||||
return "待收货";
|
||||
case 4:
|
||||
return "待评价";
|
||||
case 5:
|
||||
return "已完成";
|
||||
case 6:
|
||||
return "已取消";
|
||||
case 7:
|
||||
return "售后中";
|
||||
case 8:
|
||||
return "已退款";
|
||||
default:
|
||||
return "未知状态";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,19 @@ public class QuoteMaterial extends BaseEntity
|
|||
@Excel(name = "类型名称")
|
||||
private String typeName;
|
||||
|
||||
|
||||
@Excel(name = "附件图片")
|
||||
private String image;
|
||||
|
||||
@Excel(name = "是否有分佣 1:有 2:无 (默认有分佣)")
|
||||
private Integer iscommissions;
|
||||
|
||||
@Excel(name = "分佣比例(百分比,默认的系统设置)")
|
||||
private BigDecimal commissions;
|
||||
|
||||
@Excel(name = "净利润")
|
||||
private BigDecimal profit;
|
||||
|
||||
/** $column.columnComment */
|
||||
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
|
||||
private Date createdAt;
|
||||
|
|
@ -203,6 +216,39 @@ public class QuoteMaterial extends BaseEntity
|
|||
this.typeintids = typeintids;
|
||||
}
|
||||
|
||||
|
||||
public BigDecimal getProfit() {
|
||||
return profit;
|
||||
}
|
||||
|
||||
public void setProfit(BigDecimal profit) {
|
||||
this.profit = profit;
|
||||
}
|
||||
|
||||
public BigDecimal getCommissions() {
|
||||
return commissions;
|
||||
}
|
||||
|
||||
public void setCommissions(BigDecimal commissions) {
|
||||
this.commissions = commissions;
|
||||
}
|
||||
|
||||
public Integer getIscommissions() {
|
||||
return iscommissions;
|
||||
}
|
||||
|
||||
public void setIscommissions(Integer iscommissions) {
|
||||
this.iscommissions = iscommissions;
|
||||
}
|
||||
|
||||
public String getImage() {
|
||||
return image;
|
||||
}
|
||||
|
||||
public void setImage(String image) {
|
||||
this.image = image;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
|
|
|||
|
|
@ -122,6 +122,53 @@ private String cateName;
|
|||
@Excel(name = "所需技能")
|
||||
private String skillIds;
|
||||
|
||||
|
||||
/** 是否可拼团 1:是 2:否 */
|
||||
@Excel(name = "是否可拼团 1:是 2:否")
|
||||
private Integer isgroup;
|
||||
|
||||
/** 拼团价 */
|
||||
@Excel(name = "拼团价")
|
||||
private BigDecimal groupprice;
|
||||
|
||||
/** 是否可设置次卡 1:是 2:否 */
|
||||
@Excel(name = "是否可设置次卡 1:是 2:否")
|
||||
private Integer isonce;
|
||||
|
||||
/** 次卡价格 */
|
||||
@Excel(name = "次卡价格")
|
||||
private BigDecimal onceprice;
|
||||
|
||||
/** 分佣模式 1:系统分佣 2:独立分佣 3:不分佣 */
|
||||
@Excel(name = "分佣模式 1:系统分佣 2:独立分佣 3:不分佣")
|
||||
private Integer commissiontype;
|
||||
|
||||
/** 分佣比例 */
|
||||
@Excel(name = "分佣比例")
|
||||
private BigDecimal commission;
|
||||
|
||||
/** 派单模式 1:系统派单 2:后台手动派单 3:指定工人 */
|
||||
@Excel(name = "派单模式 1:系统派单 2:后台手动派单 3:指定工人")
|
||||
private Integer dispatchtype;
|
||||
|
||||
/** 指定工人的id集合 */
|
||||
@Excel(name = "指定工人的id集合")
|
||||
private String workerids;
|
||||
|
||||
/** 是否为一口价 1:是 2:否 */
|
||||
@Excel(name = "是否为一口价 1:是 2:否")
|
||||
private Integer isfixed;
|
||||
|
||||
/** 一口价价格 */
|
||||
@Excel(name = "一口价价格")
|
||||
private BigDecimal fixedprice;
|
||||
|
||||
/** 派单模式 1:系统派单 2:后台手动派单 3:指定工人 */
|
||||
@Excel(name = "拼团人数")
|
||||
private Integer groupnum;
|
||||
|
||||
|
||||
|
||||
/** $column.columnComment */
|
||||
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
|
||||
private Date createdAt;
|
||||
|
|
@ -461,6 +508,95 @@ private String cateName;
|
|||
this.minPrice = minPrice;
|
||||
}
|
||||
|
||||
|
||||
public BigDecimal getFixedprice() {
|
||||
return fixedprice;
|
||||
}
|
||||
|
||||
public void setFixedprice(BigDecimal fixedprice) {
|
||||
this.fixedprice = fixedprice;
|
||||
}
|
||||
|
||||
public Integer getIsfixed() {
|
||||
return isfixed;
|
||||
}
|
||||
|
||||
public void setIsfixed(Integer isfixed) {
|
||||
this.isfixed = isfixed;
|
||||
}
|
||||
|
||||
public String getWorkerids() {
|
||||
return workerids;
|
||||
}
|
||||
|
||||
public void setWorkerids(String workerids) {
|
||||
this.workerids = workerids;
|
||||
}
|
||||
|
||||
public Integer getDispatchtype() {
|
||||
return dispatchtype;
|
||||
}
|
||||
|
||||
public void setDispatchtype(Integer dispatchtype) {
|
||||
this.dispatchtype = dispatchtype;
|
||||
}
|
||||
|
||||
public BigDecimal getCommission() {
|
||||
return commission;
|
||||
}
|
||||
|
||||
public void setCommission(BigDecimal commission) {
|
||||
this.commission = commission;
|
||||
}
|
||||
|
||||
public Integer getCommissiontype() {
|
||||
return commissiontype;
|
||||
}
|
||||
|
||||
public void setCommissiontype(Integer commissiontype) {
|
||||
this.commissiontype = commissiontype;
|
||||
}
|
||||
|
||||
public BigDecimal getOnceprice() {
|
||||
return onceprice;
|
||||
}
|
||||
|
||||
public void setOnceprice(BigDecimal onceprice) {
|
||||
this.onceprice = onceprice;
|
||||
}
|
||||
|
||||
public Integer getIsonce() {
|
||||
return isonce;
|
||||
}
|
||||
|
||||
public void setIsonce(Integer isonce) {
|
||||
this.isonce = isonce;
|
||||
}
|
||||
|
||||
public BigDecimal getGroupprice() {
|
||||
return groupprice;
|
||||
}
|
||||
|
||||
public void setGroupprice(BigDecimal groupprice) {
|
||||
this.groupprice = groupprice;
|
||||
}
|
||||
|
||||
public Integer getIsgroup() {
|
||||
return isgroup;
|
||||
}
|
||||
|
||||
public void setIsgroup(Integer isgroup) {
|
||||
this.isgroup = isgroup;
|
||||
}
|
||||
|
||||
public Integer getGroupnum() {
|
||||
return groupnum;
|
||||
}
|
||||
|
||||
public void setGroupnum(Integer groupnum) {
|
||||
this.groupnum = groupnum;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,173 @@
|
|||
package com.ruoyi.system.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
import com.ruoyi.common.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 需求报价对象 user_demand_quotation
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
public class UserDemandQuotation extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** $column.columnComment */
|
||||
private Long id;
|
||||
|
||||
/** 订单id */
|
||||
@Excel(name = "订单id")
|
||||
private String orderid;
|
||||
|
||||
/** 报价金额 */
|
||||
@Excel(name = "报价金额")
|
||||
private BigDecimal money;
|
||||
|
||||
/** 师傅id */
|
||||
@Excel(name = "师傅id")
|
||||
private Long workerid;
|
||||
|
||||
/** 师傅姓名 */
|
||||
@Excel(name = "师傅姓名")
|
||||
private String workername;
|
||||
|
||||
/** 状态 1报价 2被选中 */
|
||||
private Long status;
|
||||
|
||||
/** 师傅图像 */
|
||||
@Excel(name = "师傅图像")
|
||||
private String workerimage;
|
||||
|
||||
/** 报价时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Excel(name = "报价时间", width = 30, dateFormat = "yyyy-MM-dd")
|
||||
private Date quotationTime;
|
||||
|
||||
/** 创建时间 */
|
||||
private Date createdAt;
|
||||
|
||||
/** 修改时间 */
|
||||
private Date updatedAt;
|
||||
|
||||
public void setId(Long id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setOrderid(String orderid)
|
||||
{
|
||||
this.orderid = orderid;
|
||||
}
|
||||
|
||||
public String getOrderid()
|
||||
{
|
||||
return orderid;
|
||||
}
|
||||
|
||||
public void setMoney(BigDecimal money)
|
||||
{
|
||||
this.money = money;
|
||||
}
|
||||
|
||||
public BigDecimal getMoney()
|
||||
{
|
||||
return money;
|
||||
}
|
||||
|
||||
public void setWorkerid(Long workerid)
|
||||
{
|
||||
this.workerid = workerid;
|
||||
}
|
||||
|
||||
public Long getWorkerid()
|
||||
{
|
||||
return workerid;
|
||||
}
|
||||
|
||||
public void setWorkername(String workername)
|
||||
{
|
||||
this.workername = workername;
|
||||
}
|
||||
|
||||
public String getWorkername()
|
||||
{
|
||||
return workername;
|
||||
}
|
||||
|
||||
public void setStatus(Long status)
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public Long getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setWorkerimage(String workerimage)
|
||||
{
|
||||
this.workerimage = workerimage;
|
||||
}
|
||||
|
||||
public String getWorkerimage()
|
||||
{
|
||||
return workerimage;
|
||||
}
|
||||
|
||||
public void setQuotationTime(Date quotationTime)
|
||||
{
|
||||
this.quotationTime = quotationTime;
|
||||
}
|
||||
|
||||
public Date getQuotationTime()
|
||||
{
|
||||
return quotationTime;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt)
|
||||
{
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public Date getCreatedAt()
|
||||
{
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(Date updatedAt)
|
||||
{
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
public Date getUpdatedAt()
|
||||
{
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("id", getId())
|
||||
.append("orderid", getOrderid())
|
||||
.append("money", getMoney())
|
||||
.append("workerid", getWorkerid())
|
||||
.append("workername", getWorkername())
|
||||
.append("status", getStatus())
|
||||
.append("workerimage", getWorkerimage())
|
||||
.append("quotationTime", getQuotationTime())
|
||||
.append("createdAt", getCreatedAt())
|
||||
.append("updatedAt", getUpdatedAt())
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,217 @@
|
|||
package com.ruoyi.system.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
import com.ruoyi.common.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 拼团专区管理对象 user_group_buying
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
public class UserGroupBuying extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键id */
|
||||
private Long id;
|
||||
|
||||
/** 订单id */
|
||||
@Excel(name = "订单id")
|
||||
private String orderid;
|
||||
|
||||
/** 用户id */
|
||||
private Long uid;
|
||||
|
||||
/** 支付金额 */
|
||||
@Excel(name = "支付金额")
|
||||
private BigDecimal money;
|
||||
|
||||
/** 状态 */
|
||||
@Excel(name = "状态")
|
||||
private Long status;
|
||||
|
||||
/** 优惠金额 */
|
||||
@Excel(name = "优惠金额")
|
||||
private BigDecimal deduction;
|
||||
|
||||
/** 用户姓名 */
|
||||
@Excel(name = "用户姓名")
|
||||
private String uname;
|
||||
|
||||
/** 支付时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
|
||||
private Date paytime;
|
||||
|
||||
/** 支付订单号 */
|
||||
@Excel(name = "支付订单号")
|
||||
private String transactionId;
|
||||
|
||||
/** 支付类别 */
|
||||
@Excel(name = "支付类别")
|
||||
private Long paytype;
|
||||
|
||||
/** 服务商品id */
|
||||
private Long productId;
|
||||
|
||||
/** 创建时间 */
|
||||
private Date createdAt;
|
||||
|
||||
/** 修改时间 */
|
||||
private Date updatedAt;
|
||||
|
||||
public void setId(Long id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setOrderid(String orderid)
|
||||
{
|
||||
this.orderid = orderid;
|
||||
}
|
||||
|
||||
public String getOrderid()
|
||||
{
|
||||
return orderid;
|
||||
}
|
||||
|
||||
public void setUid(Long uid)
|
||||
{
|
||||
this.uid = uid;
|
||||
}
|
||||
|
||||
public Long getUid()
|
||||
{
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void setMoney(BigDecimal money)
|
||||
{
|
||||
this.money = money;
|
||||
}
|
||||
|
||||
public BigDecimal getMoney()
|
||||
{
|
||||
return money;
|
||||
}
|
||||
|
||||
public void setStatus(Long status)
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public Long getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setDeduction(BigDecimal deduction)
|
||||
{
|
||||
this.deduction = deduction;
|
||||
}
|
||||
|
||||
public BigDecimal getDeduction()
|
||||
{
|
||||
return deduction;
|
||||
}
|
||||
|
||||
public void setUname(String uname)
|
||||
{
|
||||
this.uname = uname;
|
||||
}
|
||||
|
||||
public String getUname()
|
||||
{
|
||||
return uname;
|
||||
}
|
||||
|
||||
public void setPaytime(Date paytime)
|
||||
{
|
||||
this.paytime = paytime;
|
||||
}
|
||||
|
||||
public Date getPaytime()
|
||||
{
|
||||
return paytime;
|
||||
}
|
||||
|
||||
public void setTransactionId(String transactionId)
|
||||
{
|
||||
this.transactionId = transactionId;
|
||||
}
|
||||
|
||||
public String getTransactionId()
|
||||
{
|
||||
return transactionId;
|
||||
}
|
||||
|
||||
public void setPaytype(Long paytype)
|
||||
{
|
||||
this.paytype = paytype;
|
||||
}
|
||||
|
||||
public Long getPaytype()
|
||||
{
|
||||
return paytype;
|
||||
}
|
||||
|
||||
public void setProductId(Long productId)
|
||||
{
|
||||
this.productId = productId;
|
||||
}
|
||||
|
||||
public Long getProductId()
|
||||
{
|
||||
return productId;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt)
|
||||
{
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public Date getCreatedAt()
|
||||
{
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(Date updatedAt)
|
||||
{
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
public Date getUpdatedAt()
|
||||
{
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("id", getId())
|
||||
.append("orderid", getOrderid())
|
||||
.append("uid", getUid())
|
||||
.append("money", getMoney())
|
||||
.append("status", getStatus())
|
||||
.append("deduction", getDeduction())
|
||||
.append("uname", getUname())
|
||||
.append("paytime", getPaytime())
|
||||
.append("transactionId", getTransactionId())
|
||||
.append("paytype", getPaytype())
|
||||
.append("productId", getProductId())
|
||||
.append("createdAt", getCreatedAt())
|
||||
.append("updatedAt", getUpdatedAt())
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.ruoyi.system.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
|
|
@ -11,7 +12,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
|
|||
* 发票信息对象 users_invoice_info
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-06-27
|
||||
* @date 2025-06-30
|
||||
*/
|
||||
public class UsersInvoiceInfo extends BaseEntity
|
||||
{
|
||||
|
|
@ -74,6 +75,26 @@ public class UsersInvoiceInfo extends BaseEntity
|
|||
@Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
|
||||
private Date updatedAt;
|
||||
|
||||
/** 开票金额 */
|
||||
@Excel(name = "开票金额")
|
||||
private BigDecimal invoicemoney;
|
||||
|
||||
/** 开票内容 */
|
||||
@Excel(name = "开票内容")
|
||||
private String invoicetext;
|
||||
|
||||
/** 开票订单号 */
|
||||
@Excel(name = "开票订单号")
|
||||
private String orderid;
|
||||
|
||||
/** 开票状态 1:未开票 2:已开票 */
|
||||
@Excel(name = "开票状态 1:未开票 2:已开票")
|
||||
private Integer status;
|
||||
|
||||
/** 发票附件 */
|
||||
@Excel(name = "发票附件")
|
||||
private String filedata;
|
||||
|
||||
public void setId(Integer id)
|
||||
{
|
||||
this.id = id;
|
||||
|
|
@ -214,6 +235,56 @@ public class UsersInvoiceInfo extends BaseEntity
|
|||
return updatedAt;
|
||||
}
|
||||
|
||||
public void setInvoicemoney(BigDecimal invoicemoney)
|
||||
{
|
||||
this.invoicemoney = invoicemoney;
|
||||
}
|
||||
|
||||
public BigDecimal getInvoicemoney()
|
||||
{
|
||||
return invoicemoney;
|
||||
}
|
||||
|
||||
public void setInvoicetext(String invoicetext)
|
||||
{
|
||||
this.invoicetext = invoicetext;
|
||||
}
|
||||
|
||||
public String getInvoicetext()
|
||||
{
|
||||
return invoicetext;
|
||||
}
|
||||
|
||||
public void setOrderid(String orderid)
|
||||
{
|
||||
this.orderid = orderid;
|
||||
}
|
||||
|
||||
public String getOrderid()
|
||||
{
|
||||
return orderid;
|
||||
}
|
||||
|
||||
public void setStatus(Integer status)
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public Integer getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setFiledata(String filedata)
|
||||
{
|
||||
this.filedata = filedata;
|
||||
}
|
||||
|
||||
public String getFiledata()
|
||||
{
|
||||
return filedata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
|
@ -231,6 +302,11 @@ public class UsersInvoiceInfo extends BaseEntity
|
|||
.append("category", getCategory())
|
||||
.append("createdAt", getCreatedAt())
|
||||
.append("updatedAt", getUpdatedAt())
|
||||
.append("invoicemoney", getInvoicemoney())
|
||||
.append("invoicetext", getInvoicetext())
|
||||
.append("orderid", getOrderid())
|
||||
.append("status", getStatus())
|
||||
.append("filedata", getFiledata())
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
package com.ruoyi.system.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.UserDemandQuotation;
|
||||
|
||||
/**
|
||||
* 需求报价Mapper接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
public interface UserDemandQuotationMapper
|
||||
{
|
||||
/**
|
||||
* 查询需求报价
|
||||
*
|
||||
* @param id 需求报价主键
|
||||
* @return 需求报价
|
||||
*/
|
||||
public UserDemandQuotation selectUserDemandQuotationById(Long id);
|
||||
|
||||
/**
|
||||
* 查询需求报价列表
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 需求报价集合
|
||||
*/
|
||||
public List<UserDemandQuotation> selectUserDemandQuotationList(UserDemandQuotation userDemandQuotation);
|
||||
|
||||
/**
|
||||
* 新增需求报价
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertUserDemandQuotation(UserDemandQuotation userDemandQuotation);
|
||||
|
||||
/**
|
||||
* 修改需求报价
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateUserDemandQuotation(UserDemandQuotation userDemandQuotation);
|
||||
|
||||
/**
|
||||
* 删除需求报价
|
||||
*
|
||||
* @param id 需求报价主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserDemandQuotationById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除需求报价
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserDemandQuotationByIds(Long[] ids);
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
package com.ruoyi.system.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.UserGroupBuying;
|
||||
|
||||
/**
|
||||
* 拼团专区管理Mapper接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
public interface UserGroupBuyingMapper
|
||||
{
|
||||
/**
|
||||
* 查询拼团专区管理
|
||||
*
|
||||
* @param id 拼团专区管理主键
|
||||
* @return 拼团专区管理
|
||||
*/
|
||||
public UserGroupBuying selectUserGroupBuyingById(Long id);
|
||||
|
||||
/**
|
||||
* 查询拼团专区管理列表
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 拼团专区管理集合
|
||||
*/
|
||||
public List<UserGroupBuying> selectUserGroupBuyingList(UserGroupBuying userGroupBuying);
|
||||
|
||||
/**
|
||||
* 新增拼团专区管理
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertUserGroupBuying(UserGroupBuying userGroupBuying);
|
||||
|
||||
/**
|
||||
* 修改拼团专区管理
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateUserGroupBuying(UserGroupBuying userGroupBuying);
|
||||
|
||||
/**
|
||||
* 删除拼团专区管理
|
||||
*
|
||||
* @param id 拼团专区管理主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserGroupBuyingById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除拼团专区管理
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserGroupBuyingByIds(Long[] ids);
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
package com.ruoyi.system.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.UserDemandQuotation;
|
||||
|
||||
/**
|
||||
* 需求报价Service接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
public interface IUserDemandQuotationService
|
||||
{
|
||||
/**
|
||||
* 查询需求报价
|
||||
*
|
||||
* @param id 需求报价主键
|
||||
* @return 需求报价
|
||||
*/
|
||||
public UserDemandQuotation selectUserDemandQuotationById(Long id);
|
||||
|
||||
/**
|
||||
* 查询需求报价列表
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 需求报价集合
|
||||
*/
|
||||
public List<UserDemandQuotation> selectUserDemandQuotationList(UserDemandQuotation userDemandQuotation);
|
||||
|
||||
/**
|
||||
* 新增需求报价
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertUserDemandQuotation(UserDemandQuotation userDemandQuotation);
|
||||
|
||||
/**
|
||||
* 修改需求报价
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateUserDemandQuotation(UserDemandQuotation userDemandQuotation);
|
||||
|
||||
/**
|
||||
* 批量删除需求报价
|
||||
*
|
||||
* @param ids 需要删除的需求报价主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserDemandQuotationByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除需求报价信息
|
||||
*
|
||||
* @param id 需求报价主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserDemandQuotationById(Long id);
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
package com.ruoyi.system.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.UserGroupBuying;
|
||||
|
||||
/**
|
||||
* 拼团专区管理Service接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
public interface IUserGroupBuyingService
|
||||
{
|
||||
/**
|
||||
* 查询拼团专区管理
|
||||
*
|
||||
* @param id 拼团专区管理主键
|
||||
* @return 拼团专区管理
|
||||
*/
|
||||
public UserGroupBuying selectUserGroupBuyingById(Long id);
|
||||
|
||||
/**
|
||||
* 查询拼团专区管理列表
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 拼团专区管理集合
|
||||
*/
|
||||
public List<UserGroupBuying> selectUserGroupBuyingList(UserGroupBuying userGroupBuying);
|
||||
|
||||
/**
|
||||
* 新增拼团专区管理
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertUserGroupBuying(UserGroupBuying userGroupBuying);
|
||||
|
||||
/**
|
||||
* 修改拼团专区管理
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateUserGroupBuying(UserGroupBuying userGroupBuying);
|
||||
|
||||
/**
|
||||
* 批量删除拼团专区管理
|
||||
*
|
||||
* @param ids 需要删除的拼团专区管理主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserGroupBuyingByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除拼团专区管理信息
|
||||
*
|
||||
* @param id 拼团专区管理主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteUserGroupBuyingById(Long id);
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
package com.ruoyi.system.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.system.mapper.UserDemandQuotationMapper;
|
||||
import com.ruoyi.system.domain.UserDemandQuotation;
|
||||
import com.ruoyi.system.service.IUserDemandQuotationService;
|
||||
|
||||
/**
|
||||
* 需求报价Service业务层处理
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
@Service
|
||||
public class UserDemandQuotationServiceImpl implements IUserDemandQuotationService
|
||||
{
|
||||
@Autowired
|
||||
private UserDemandQuotationMapper userDemandQuotationMapper;
|
||||
|
||||
/**
|
||||
* 查询需求报价
|
||||
*
|
||||
* @param id 需求报价主键
|
||||
* @return 需求报价
|
||||
*/
|
||||
@Override
|
||||
public UserDemandQuotation selectUserDemandQuotationById(Long id)
|
||||
{
|
||||
return userDemandQuotationMapper.selectUserDemandQuotationById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询需求报价列表
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 需求报价
|
||||
*/
|
||||
@Override
|
||||
public List<UserDemandQuotation> selectUserDemandQuotationList(UserDemandQuotation userDemandQuotation)
|
||||
{
|
||||
return userDemandQuotationMapper.selectUserDemandQuotationList(userDemandQuotation);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增需求报价
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertUserDemandQuotation(UserDemandQuotation userDemandQuotation)
|
||||
{
|
||||
return userDemandQuotationMapper.insertUserDemandQuotation(userDemandQuotation);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改需求报价
|
||||
*
|
||||
* @param userDemandQuotation 需求报价
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateUserDemandQuotation(UserDemandQuotation userDemandQuotation)
|
||||
{
|
||||
return userDemandQuotationMapper.updateUserDemandQuotation(userDemandQuotation);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除需求报价
|
||||
*
|
||||
* @param ids 需要删除的需求报价主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteUserDemandQuotationByIds(Long[] ids)
|
||||
{
|
||||
return userDemandQuotationMapper.deleteUserDemandQuotationByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除需求报价信息
|
||||
*
|
||||
* @param id 需求报价主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteUserDemandQuotationById(Long id)
|
||||
{
|
||||
return userDemandQuotationMapper.deleteUserDemandQuotationById(id);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
package com.ruoyi.system.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.system.mapper.UserGroupBuyingMapper;
|
||||
import com.ruoyi.system.domain.UserGroupBuying;
|
||||
import com.ruoyi.system.service.IUserGroupBuyingService;
|
||||
|
||||
/**
|
||||
* 拼团专区管理Service业务层处理
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-07-02
|
||||
*/
|
||||
@Service
|
||||
public class UserGroupBuyingServiceImpl implements IUserGroupBuyingService
|
||||
{
|
||||
@Autowired
|
||||
private UserGroupBuyingMapper userGroupBuyingMapper;
|
||||
|
||||
/**
|
||||
* 查询拼团专区管理
|
||||
*
|
||||
* @param id 拼团专区管理主键
|
||||
* @return 拼团专区管理
|
||||
*/
|
||||
@Override
|
||||
public UserGroupBuying selectUserGroupBuyingById(Long id)
|
||||
{
|
||||
return userGroupBuyingMapper.selectUserGroupBuyingById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询拼团专区管理列表
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 拼团专区管理
|
||||
*/
|
||||
@Override
|
||||
public List<UserGroupBuying> selectUserGroupBuyingList(UserGroupBuying userGroupBuying)
|
||||
{
|
||||
return userGroupBuyingMapper.selectUserGroupBuyingList(userGroupBuying);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增拼团专区管理
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertUserGroupBuying(UserGroupBuying userGroupBuying)
|
||||
{
|
||||
return userGroupBuyingMapper.insertUserGroupBuying(userGroupBuying);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改拼团专区管理
|
||||
*
|
||||
* @param userGroupBuying 拼团专区管理
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateUserGroupBuying(UserGroupBuying userGroupBuying)
|
||||
{
|
||||
return userGroupBuyingMapper.updateUserGroupBuying(userGroupBuying);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除拼团专区管理
|
||||
*
|
||||
* @param ids 需要删除的拼团专区管理主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteUserGroupBuyingByIds(Long[] ids)
|
||||
{
|
||||
return userGroupBuyingMapper.deleteUserGroupBuyingByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除拼团专区管理信息
|
||||
*
|
||||
* @param id 拼团专区管理主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteUserGroupBuyingById(Long id)
|
||||
{
|
||||
return userGroupBuyingMapper.deleteUserGroupBuyingById(id);
|
||||
}
|
||||
}
|
||||
|
|
@ -11,14 +11,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="title" column="title" />
|
||||
<result property="price" column="price" />
|
||||
<result property="unit" column="unit" />
|
||||
<result property="image" column="image" />
|
||||
<result property="iscommissions" column="iscommissions" />
|
||||
<result property="commissions" column="commissions" />
|
||||
<result property="profit" column="profit" />
|
||||
<result property="createdAt" column="created_at" />
|
||||
<result property="updatedAt" column="updated_at" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectQuoteMaterialVo">
|
||||
select id, good_id, type_id, title, price, unit, created_at, updated_at from quote_material
|
||||
select id, good_id, type_id, title, price, unit,profit,commissions,iscommissions,image, created_at, updated_at from quote_material
|
||||
</sql>
|
||||
|
||||
<select id="selectQuoteMaterialList" parameterType="QuoteMaterial" resultMap="QuoteMaterialResult">
|
||||
<include refid="selectQuoteMaterialVo"/>
|
||||
<where>
|
||||
|
|
@ -56,6 +58,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="title != null and title != ''">title,</if>
|
||||
<if test="price != null">price,</if>
|
||||
<if test="unit != null and unit != ''">unit,</if>
|
||||
<if test="image != null and image != ''">image,</if>
|
||||
<if test="iscommissions != null and iscommissions != ''">iscommissions,</if>
|
||||
<if test="commissions != null and commissions != ''">commissions,</if>
|
||||
<if test="profit != null and profit != ''">profit,</if>
|
||||
created_at,
|
||||
updated_at
|
||||
</trim>
|
||||
|
|
@ -65,6 +71,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="title != null and title != ''">#{title},</if>
|
||||
<if test="price != null">#{price},</if>
|
||||
<if test="unit != null and unit != ''">#{unit},</if>
|
||||
<if test="image != null and image != ''">#{image},</if>
|
||||
<if test="iscommissions != null and iscommissions != ''">#{iscommissions},</if>
|
||||
<if test="commissions != null and commissions != ''">#{commissions},</if>
|
||||
<if test="profit != null and profit != ''">#{profit},</if>
|
||||
NOW(),
|
||||
NOW()
|
||||
</trim>
|
||||
|
|
@ -78,6 +88,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="title != null and title != ''">title = #{title},</if>
|
||||
<if test="price != null">price = #{price},</if>
|
||||
<if test="unit != null and unit != ''">unit = #{unit},</if>
|
||||
<if test="image != null and image != ''">image = #{image},</if>
|
||||
<if test="iscommissions != null and iscommissions != ''">iscommissions = #{iscommissions},</if>
|
||||
<if test="commissions != null and commissions != ''">commissions = #{commissions},</if>
|
||||
<if test="profit != null and profit != ''">profit = #{profit},</if>
|
||||
updated_at = NOW()
|
||||
</trim>
|
||||
where id = #{id}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="info" column="info" />
|
||||
<result property="price" column="price" />
|
||||
<result property="priceZn" column="price_zn" />
|
||||
<result property="groupnum" column="groupnum" />
|
||||
<result property="sales" column="sales" />
|
||||
<result property="stock" column="stock" />
|
||||
<result property="status" column="status" />
|
||||
|
|
@ -33,10 +34,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="createdAt" column="created_at" />
|
||||
<result property="updatedAt" column="updated_at" />
|
||||
<result property="deletedAt" column="deleted_at" />
|
||||
<result property="isgroup" column="isgroup" />
|
||||
<result property="groupprice" column="groupprice" />
|
||||
<result property="isonce" column="isonce" />
|
||||
<result property="onceprice" column="onceprice" />
|
||||
<result property="commissiontype" column="commissiontype" />
|
||||
<result property="commission" column="commission" />
|
||||
<result property="dispatchtype" column="dispatchtype" />
|
||||
<result property="workerids" column="workerids" />
|
||||
<result property="isfixed" column="isfixed" />
|
||||
<result property="fixedprice" column="fixedprice" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectServiceGoodsVo">
|
||||
select id, title, icon, imgs, sub_title, info, price, price_zn, sales, stock, status, description, sku_type, sku, latitude, longitude, type, cate_id, project, sort, material, postage, basic, margin, skill_ids, created_at, updated_at, deleted_at from service_goods
|
||||
select id, title, icon, imgs, sub_title, info, price, price_zn, sales, stock, status, description, sku_type,groupnum,sku, latitude, longitude, type, cate_id, project, sort, material, postage, basic, margin, skill_ids, created_at, updated_at, deleted_at, isgroup, groupprice, isonce, onceprice, commissiontype, commission, dispatchtype, workerids, isfixed, fixedprice from service_goods
|
||||
</sql>
|
||||
|
||||
<select id="selectServiceGoodsList" parameterType="ServiceGoods" resultMap="ServiceGoodsResult">
|
||||
|
|
@ -100,6 +111,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="margin != null">margin,</if>
|
||||
<if test="skillIds != null">skill_ids,</if>
|
||||
<if test="deletedAt != null">deleted_at,</if>
|
||||
<if test="isgroup != null">isgroup,</if>
|
||||
<if test="groupprice != null">groupprice,</if>
|
||||
<if test="isonce != null">isonce,</if>
|
||||
<if test="onceprice != null">onceprice,</if>
|
||||
<if test="commissiontype != null">commissiontype,</if>
|
||||
<if test="commission != null">commission,</if>
|
||||
<if test="dispatchtype != null">dispatchtype,</if>
|
||||
<if test="workerids != null">workerids,</if>
|
||||
<if test="isfixed != null">isfixed,</if>
|
||||
<if test="fixedprice != null">fixedprice,</if>
|
||||
<if test="groupnum != null">groupnum,</if>
|
||||
|
||||
created_at,
|
||||
updated_at
|
||||
|
||||
|
|
@ -130,6 +153,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="margin != null">#{margin},</if>
|
||||
<if test="skillIds != null">#{skillIds},</if>
|
||||
<if test="deletedAt != null">#{deletedAt},</if>
|
||||
<if test="isgroup != null">#{isgroup},</if>
|
||||
<if test="groupprice != null">#{groupprice},</if>
|
||||
<if test="isonce != null">#{isonce},</if>
|
||||
<if test="onceprice != null">#{onceprice},</if>
|
||||
<if test="commissiontype != null">#{commissiontype},</if>
|
||||
<if test="commission != null">#{commission},</if>
|
||||
<if test="dispatchtype != null">#{dispatchtype},</if>
|
||||
<if test="workerids != null">#{workerids},</if>
|
||||
<if test="isfixed != null">#{isfixed},</if>
|
||||
<if test="fixedprice != null">#{fixedprice},</if>
|
||||
<if test="groupnum != null">#{groupnum},</if>
|
||||
|
||||
|
||||
NOW(),
|
||||
NOW()
|
||||
|
||||
|
|
@ -164,6 +200,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="margin != null">margin = #{margin},</if>
|
||||
<if test="skillIds != null">skill_ids = #{skillIds},</if>
|
||||
<if test="deletedAt != null">deleted_at = #{deletedAt},</if>
|
||||
<if test="isgroup != null">isgroup = #{isgroup},</if>
|
||||
<if test="groupprice != null">groupprice = #{groupprice},</if>
|
||||
<if test="isonce != null">isonce = #{isonce},</if>
|
||||
<if test="onceprice != null">onceprice = #{onceprice},</if>
|
||||
<if test="commissiontype != null">commissiontype = #{commissiontype},</if>
|
||||
<if test="commission != null">commission = #{commission},</if>
|
||||
<if test="dispatchtype != null">dispatchtype = #{dispatchtype},</if>
|
||||
<if test="workerids != null">workerids = #{workerids},</if>
|
||||
<if test="isfixed != null">isfixed = #{isfixed},</if>
|
||||
<if test="fixedprice != null">fixedprice = #{fixedprice},</if>
|
||||
<if test="groupnum != null">groupnum = #{groupnum},</if>
|
||||
|
||||
updated_at = NOW()
|
||||
</trim>
|
||||
where id = #{id}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.system.mapper.UserDemandQuotationMapper">
|
||||
|
||||
<resultMap type="UserDemandQuotation" id="UserDemandQuotationResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="orderid" column="orderid" />
|
||||
<result property="money" column="money" />
|
||||
<result property="workerid" column="workerid" />
|
||||
<result property="workername" column="workername" />
|
||||
<result property="status" column="status" />
|
||||
<result property="workerimage" column="workerimage" />
|
||||
<result property="quotationTime" column="quotation_time" />
|
||||
<result property="createdAt" column="created_at" />
|
||||
<result property="updatedAt" column="updated_at" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectUserDemandQuotationVo">
|
||||
select id, orderid, money, workerid, workername, status, workerimage, quotation_time, created_at, updated_at from user_demand_quotation
|
||||
</sql>
|
||||
|
||||
<select id="selectUserDemandQuotationList" parameterType="UserDemandQuotation" resultMap="UserDemandQuotationResult">
|
||||
<include refid="selectUserDemandQuotationVo"/>
|
||||
<where>
|
||||
<if test="orderid != null and orderid != ''"> and orderid = #{orderid}</if>
|
||||
<if test="workerid != null "> and workerid = #{workerid}</if>
|
||||
<if test="workername != null and workername != ''"> and workername like concat('%', #{workername}, '%')</if>
|
||||
<if test="status != null "> and status = #{status}</if>
|
||||
<if test="workerimage != null and workerimage != ''"> and workerimage = #{workerimage}</if>
|
||||
<if test="quotationTime != null "> and quotation_time = #{quotationTime}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectUserDemandQuotationById" parameterType="Long" resultMap="UserDemandQuotationResult">
|
||||
<include refid="selectUserDemandQuotationVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertUserDemandQuotation" parameterType="UserDemandQuotation">
|
||||
insert into user_demand_quotation
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">id,</if>
|
||||
<if test="orderid != null">orderid,</if>
|
||||
<if test="money != null">money,</if>
|
||||
<if test="workerid != null">workerid,</if>
|
||||
<if test="workername != null">workername,</if>
|
||||
<if test="status != null">status,</if>
|
||||
<if test="workerimage != null">workerimage,</if>
|
||||
<if test="quotationTime != null">quotation_time,</if>
|
||||
<if test="createdAt != null">created_at,</if>
|
||||
<if test="updatedAt != null">updated_at,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">#{id},</if>
|
||||
<if test="orderid != null">#{orderid},</if>
|
||||
<if test="money != null">#{money},</if>
|
||||
<if test="workerid != null">#{workerid},</if>
|
||||
<if test="workername != null">#{workername},</if>
|
||||
<if test="status != null">#{status},</if>
|
||||
<if test="workerimage != null">#{workerimage},</if>
|
||||
<if test="quotationTime != null">#{quotationTime},</if>
|
||||
<if test="createdAt != null">#{createdAt},</if>
|
||||
<if test="updatedAt != null">#{updatedAt},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateUserDemandQuotation" parameterType="UserDemandQuotation">
|
||||
update user_demand_quotation
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="orderid != null">orderid = #{orderid},</if>
|
||||
<if test="money != null">money = #{money},</if>
|
||||
<if test="workerid != null">workerid = #{workerid},</if>
|
||||
<if test="workername != null">workername = #{workername},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="workerimage != null">workerimage = #{workerimage},</if>
|
||||
<if test="quotationTime != null">quotation_time = #{quotationTime},</if>
|
||||
<if test="createdAt != null">created_at = #{createdAt},</if>
|
||||
<if test="updatedAt != null">updated_at = #{updatedAt},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteUserDemandQuotationById" parameterType="Long">
|
||||
delete from user_demand_quotation where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteUserDemandQuotationByIds" parameterType="String">
|
||||
delete from user_demand_quotation where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.system.mapper.UserGroupBuyingMapper">
|
||||
|
||||
<resultMap type="UserGroupBuying" id="UserGroupBuyingResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="orderid" column="orderid" />
|
||||
<result property="uid" column="uid" />
|
||||
<result property="money" column="money" />
|
||||
<result property="status" column="status" />
|
||||
<result property="deduction" column="deduction" />
|
||||
<result property="uname" column="uname" />
|
||||
<result property="paytime" column="paytime" />
|
||||
<result property="transactionId" column="transaction_id" />
|
||||
<result property="paytype" column="paytype" />
|
||||
<result property="productId" column="product_id" />
|
||||
<result property="createdAt" column="created_at" />
|
||||
<result property="updatedAt" column="updated_at" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectUserGroupBuyingVo">
|
||||
select id, orderid, uid, money, status, deduction, uname, paytime, transaction_id, paytype, product_id, created_at, updated_at from user_group_buying
|
||||
</sql>
|
||||
|
||||
<select id="selectUserGroupBuyingList" parameterType="UserGroupBuying" resultMap="UserGroupBuyingResult">
|
||||
<include refid="selectUserGroupBuyingVo"/>
|
||||
<where>
|
||||
<if test="orderid != null and orderid != ''"> and orderid = #{orderid}</if>
|
||||
<if test="status != null "> and status = #{status}</if>
|
||||
<if test="uname != null and uname != ''"> and uname like concat('%', #{uname}, '%')</if>
|
||||
<if test="paytype != null "> and paytype = #{paytype}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectUserGroupBuyingById" parameterType="Long" resultMap="UserGroupBuyingResult">
|
||||
<include refid="selectUserGroupBuyingVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertUserGroupBuying" parameterType="UserGroupBuying">
|
||||
insert into user_group_buying
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">id,</if>
|
||||
<if test="orderid != null">orderid,</if>
|
||||
<if test="uid != null">uid,</if>
|
||||
<if test="money != null">money,</if>
|
||||
<if test="status != null">status,</if>
|
||||
<if test="deduction != null">deduction,</if>
|
||||
<if test="uname != null">uname,</if>
|
||||
<if test="paytime != null">paytime,</if>
|
||||
<if test="transactionId != null">transaction_id,</if>
|
||||
<if test="paytype != null">paytype,</if>
|
||||
<if test="productId != null">product_id,</if>
|
||||
<if test="createdAt != null">created_at,</if>
|
||||
<if test="updatedAt != null">updated_at,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">#{id},</if>
|
||||
<if test="orderid != null">#{orderid},</if>
|
||||
<if test="uid != null">#{uid},</if>
|
||||
<if test="money != null">#{money},</if>
|
||||
<if test="status != null">#{status},</if>
|
||||
<if test="deduction != null">#{deduction},</if>
|
||||
<if test="uname != null">#{uname},</if>
|
||||
<if test="paytime != null">#{paytime},</if>
|
||||
<if test="transactionId != null">#{transactionId},</if>
|
||||
<if test="paytype != null">#{paytype},</if>
|
||||
<if test="productId != null">#{productId},</if>
|
||||
<if test="createdAt != null">#{createdAt},</if>
|
||||
<if test="updatedAt != null">#{updatedAt},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateUserGroupBuying" parameterType="UserGroupBuying">
|
||||
update user_group_buying
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="orderid != null">orderid = #{orderid},</if>
|
||||
<if test="uid != null">uid = #{uid},</if>
|
||||
<if test="money != null">money = #{money},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="deduction != null">deduction = #{deduction},</if>
|
||||
<if test="uname != null">uname = #{uname},</if>
|
||||
<if test="paytime != null">paytime = #{paytime},</if>
|
||||
<if test="transactionId != null">transaction_id = #{transactionId},</if>
|
||||
<if test="paytype != null">paytype = #{paytype},</if>
|
||||
<if test="productId != null">product_id = #{productId},</if>
|
||||
<if test="createdAt != null">created_at = #{createdAt},</if>
|
||||
<if test="updatedAt != null">updated_at = #{updatedAt},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteUserGroupBuyingById" parameterType="Long">
|
||||
delete from user_group_buying where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteUserGroupBuyingByIds" parameterType="String">
|
||||
delete from user_group_buying where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.system.mapper.UsersInvoiceInfoMapper">
|
||||
|
||||
<resultMap type="UsersInvoiceInfo" id="UsersInvoiceInfoResult">
|
||||
|
|
@ -19,10 +19,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="category" column="category" />
|
||||
<result property="createdAt" column="created_at" />
|
||||
<result property="updatedAt" column="updated_at" />
|
||||
<result property="invoicemoney" column="invoicemoney" />
|
||||
<result property="invoicetext" column="invoicetext" />
|
||||
<result property="orderid" column="orderid" />
|
||||
<result property="status" column="status" />
|
||||
<result property="filedata" column="filedata" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectUsersInvoiceInfoVo">
|
||||
select id, uid, invoice_title, tax_number, bank_name, bank_account, address, phone, email, wechat, type, category, created_at, updated_at from users_invoice_info
|
||||
select id, uid, invoice_title, tax_number, bank_name, bank_account, address, phone, email, wechat, type, category, created_at, updated_at, invoicemoney, invoicetext, orderid, status, filedata from users_invoice_info
|
||||
</sql>
|
||||
|
||||
<select id="selectUsersInvoiceInfoList" parameterType="UsersInvoiceInfo" resultMap="UsersInvoiceInfoResult">
|
||||
|
|
@ -39,10 +44,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="wechat != null and wechat != ''"> and wechat = #{wechat}</if>
|
||||
<if test="type != null "> and type = #{type}</if>
|
||||
<if test="category != null "> and category = #{category}</if>
|
||||
<if test="createdAt != null "> and created_at = #{createdAt}</if>
|
||||
<if test="updatedAt != null "> and updated_at = #{updatedAt}</if>
|
||||
<if test="invoicemoney != null "> and invoicemoney = #{invoicemoney}</if>
|
||||
<if test="invoicetext != null and invoicetext != ''"> and invoicetext = #{invoicetext}</if>
|
||||
<if test="orderid != null "> and orderid = #{orderid}</if>
|
||||
<if test="status != null "> and status = #{status}</if>
|
||||
<if test="filedata != null and filedata != ''"> and filedata = #{filedata}</if>
|
||||
</where>
|
||||
order by created_at desc
|
||||
</select>
|
||||
|
||||
<select id="selectUsersInvoiceInfoById" parameterType="Integer" resultMap="UsersInvoiceInfoResult">
|
||||
<select id="selectUsersInvoiceInfoById" parameterType="Long" resultMap="UsersInvoiceInfoResult">
|
||||
<include refid="selectUsersInvoiceInfoVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
|
@ -63,6 +76,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="category != null">category,</if>
|
||||
<if test="createdAt != null">created_at,</if>
|
||||
<if test="updatedAt != null">updated_at,</if>
|
||||
<if test="invoicemoney != null">invoicemoney,</if>
|
||||
<if test="invoicetext != null">invoicetext,</if>
|
||||
<if test="orderid != null">orderid,</if>
|
||||
<if test="status != null">status,</if>
|
||||
<if test="filedata != null">filedata,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="uid != null">#{uid},</if>
|
||||
|
|
@ -78,6 +96,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="category != null">#{category},</if>
|
||||
<if test="createdAt != null">#{createdAt},</if>
|
||||
<if test="updatedAt != null">#{updatedAt},</if>
|
||||
<if test="invoicemoney != null">#{invoicemoney},</if>
|
||||
<if test="invoicetext != null">#{invoicetext},</if>
|
||||
<if test="orderid != null">#{orderid},</if>
|
||||
<if test="status != null">#{status},</if>
|
||||
<if test="filedata != null">#{filedata},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
|
@ -97,11 +120,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="category != null">category = #{category},</if>
|
||||
<if test="createdAt != null">created_at = #{createdAt},</if>
|
||||
<if test="updatedAt != null">updated_at = #{updatedAt},</if>
|
||||
<if test="invoicemoney != null">invoicemoney = #{invoicemoney},</if>
|
||||
<if test="invoicetext != null">invoicetext = #{invoicetext},</if>
|
||||
<if test="orderid != null">orderid = #{orderid},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="filedata != null">filedata = #{filedata},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteUsersInvoiceInfoById" parameterType="Integer">
|
||||
<delete id="deleteUsersInvoiceInfoById" parameterType="Long">
|
||||
delete from users_invoice_info where id = #{id}
|
||||
</delete>
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,15 @@ export function getQuoteMaterial(id) {
|
|||
})
|
||||
}
|
||||
|
||||
|
||||
// 查询项目报价--物料信息详细
|
||||
export function getConfigData(name) {
|
||||
return request({
|
||||
url: '/system/SiteConfig/grtConfigData/' + name,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增项目报价--物料信息
|
||||
export function addQuoteMaterial(data) {
|
||||
return request({
|
||||
|
|
|
|||
|
|
@ -8,7 +8,13 @@ export function listServiceGoods(query) {
|
|||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询师傅列表
|
||||
export function getlistworkerlist() {
|
||||
return request({
|
||||
url: '/system/users/workerlist',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
// 查询服务内容详细
|
||||
export function getServiceGoods(id) {
|
||||
return request({
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询拼团专区管理列表
|
||||
export function listBuying(query) {
|
||||
return request({
|
||||
url: '/system/buying/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询拼团专区管理详细
|
||||
export function getBuying(id) {
|
||||
return request({
|
||||
url: '/system/buying/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增拼团专区管理
|
||||
export function addBuying(data) {
|
||||
return request({
|
||||
url: '/system/buying',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改拼团专区管理
|
||||
export function updateBuying(data) {
|
||||
return request({
|
||||
url: '/system/buying',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除拼团专区管理
|
||||
export function delBuying(id) {
|
||||
return request({
|
||||
url: '/system/buying/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询需求报价列表
|
||||
export function listQuotation(query) {
|
||||
return request({
|
||||
url: '/system/quotation/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询需求报价详细
|
||||
export function getQuotation(id) {
|
||||
return request({
|
||||
url: '/system/quotation/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增需求报价
|
||||
export function addQuotation(data) {
|
||||
return request({
|
||||
url: '/system/quotation',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改需求报价
|
||||
export function updateQuotation(data) {
|
||||
return request({
|
||||
url: '/system/quotation',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除需求报价
|
||||
export function delQuotation(id) {
|
||||
return request({
|
||||
url: '/system/quotation/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
|
@ -113,6 +113,19 @@
|
|||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="附件图片" align="center" prop="image" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.image" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否有分佣" align="center" prop="iscommissions">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.iscommissions" :value="scope.row.iscommissions"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="分佣比例" align="center" prop="commissions" />
|
||||
<el-table-column label="净利润" align="center" prop="profit" />
|
||||
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
|
@ -173,6 +186,28 @@
|
|||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件图片" prop="image">
|
||||
<image-upload v-model="form.image"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否有分佣" prop="iscommissions">
|
||||
<el-radio-group v-model="form.iscommissions" >
|
||||
<el-radio
|
||||
v-for="dict in dict.type.iscommissions"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<template v-if="form.iscommissions == 1">
|
||||
<el-form-item label="分佣比例" prop="commissions">
|
||||
<el-input-number v-model="form.commissions" placeholder="请输入分佣比例" />
|
||||
<span style="margin-left: 8px; color: #888; font-size: 12px;">系统默认分佣比例为 {{ material_commissions }}%</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="净利润" prop="profit">
|
||||
<el-input-number v-model="form.profit" placeholder="请输入净利润" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
</el-form>
|
||||
<div class="dialog-footer" style="text-align:left;margin-top:20px;">
|
||||
<el-button @click="reset">重置</el-button>
|
||||
|
|
@ -183,11 +218,12 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial,getConfigData} from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
import { getQuoteMaterialTypeDataList } from "@/api/system/QuoteMaterialType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
dicts: ['iscommissions'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
@ -202,6 +238,8 @@ export default {
|
|||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
ConfigData: {},
|
||||
material_commissions: 0,
|
||||
|
||||
typeDataList: [],
|
||||
materialTypeList: [],
|
||||
|
|
@ -235,6 +273,10 @@ export default {
|
|||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
image: null,
|
||||
iscommissions: null,
|
||||
commissions: null,
|
||||
profit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
|
|
@ -289,6 +331,10 @@ export default {
|
|||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
image: null,
|
||||
iscommissions: null,
|
||||
commissions: null,
|
||||
profit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
|
|
@ -330,9 +376,13 @@ export default {
|
|||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
this.reset();
|
||||
this.getConfigData().then(() => {
|
||||
this.form.iscommissions = 1;
|
||||
this.form.commissions = this.material_commissions;
|
||||
this.open = true;
|
||||
this.title = "添加项目报价--物料信息";
|
||||
});
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList(1).then(response => {
|
||||
|
|
@ -344,6 +394,13 @@ export default {
|
|||
this.materialTypeList = response.data || [];
|
||||
})
|
||||
},
|
||||
|
||||
getConfigData() {
|
||||
// 返回 Promise,方便 handleAdd 等待
|
||||
return getConfigData('config_one').then(response => {
|
||||
this.material_commissions = response.data.material_commissions || 0;
|
||||
});
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
|
|
@ -354,6 +411,14 @@ export default {
|
|||
goodsintids: response.data.goodsintids || [],
|
||||
typeintids: response.data.typeintids || []
|
||||
}
|
||||
// 如果分佣比例为空,设置为 material_commissions
|
||||
if (this.form.commissions === null || this.form.commissions === undefined || this.form.commissions === '') {
|
||||
this.form.commissions = this.material_commissions;
|
||||
}
|
||||
// 如果是否有分佣为空,默认设置为有(1)
|
||||
if (this.form.iscommissions === null || this.form.iscommissions === undefined || this.form.iscommissions === '') {
|
||||
this.form.iscommissions = 1;
|
||||
}
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
|
|
@ -393,7 +458,23 @@ export default {
|
|||
this.download('system/QuoteMaterial/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
},
|
||||
|
||||
// onIsCommissionsChange(val) {
|
||||
// console.log('是否有分佣', val);
|
||||
// if (val === 2) {
|
||||
// this.form.commissions = 0;
|
||||
// } else if (val === 1) {
|
||||
// if (
|
||||
// this.form.commissions === 0 ||
|
||||
// this.form.commissions === null ||
|
||||
// this.form.commissions === undefined ||
|
||||
// this.form.commissions === ''
|
||||
// ) {
|
||||
// this.form.commissions = this.material_commissions;
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -92,16 +92,6 @@
|
|||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
|
|
@ -152,43 +142,41 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="服务项目" prop="goodsintids">
|
||||
<el-select v-model="form.goodsintids" multiple filterable placeholder="请选择服务项目" style="width: 100%">
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
<el-form-item label="类型" prop="typeintids">
|
||||
<el-select v-model="form.typeintids" multiple filterable placeholder="请选择类型" style="width: 100%">
|
||||
<el-option
|
||||
v-for="type in materialTypeList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
<el-input-number v-model="form.price" :min="0" :step="0.01" :precision="2" placeholder="请输入价格" style="width: 100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
<div class="dialog-footer" style="text-align:left;margin-top:20px;">
|
||||
<el-button @click="reset">重置</el-button>
|
||||
<el-button type="primary" @click="submitForm">提交</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
|
@ -197,6 +185,7 @@
|
|||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { getGoodsDataList } from "@/api/system/QuoteType"
|
||||
import { getQuoteMaterialTypeDataList } from "@/api/system/QuoteMaterialType"
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
data() {
|
||||
|
|
@ -215,6 +204,7 @@ export default {
|
|||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
materialTypeList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 弹出层标题
|
||||
|
|
@ -231,17 +221,29 @@ export default {
|
|||
priceMin: null,
|
||||
priceMax: null,
|
||||
unit: null,
|
||||
goodsintids: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
form: {
|
||||
id: null,
|
||||
goodId: null,
|
||||
goodsintids: [],
|
||||
typeId: null,
|
||||
typeintids: [],
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
goodsintids: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
typeintids: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
|
|
@ -259,6 +261,7 @@ export default {
|
|||
created() {
|
||||
this.getList();
|
||||
this.getTypeList();
|
||||
this.getMaterialTypeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
|
|
@ -280,7 +283,9 @@ export default {
|
|||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
goodsintids: [],
|
||||
typeId: null,
|
||||
typeintids: [],
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
|
|
@ -330,16 +335,25 @@ export default {
|
|||
this.title = "添加项目报价--物料信息"
|
||||
},
|
||||
getTypeList() {
|
||||
getGoodsDataList().then(response => {
|
||||
getGoodsDataList(1).then(response => {
|
||||
this.typeDataList = response.data;
|
||||
})
|
||||
},
|
||||
getMaterialTypeList() {
|
||||
getQuoteMaterialTypeDataList().then(response => {
|
||||
this.materialTypeList = response.data || [];
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
this.form = response.data
|
||||
this.form = {
|
||||
...response.data,
|
||||
goodsintids: response.data.goodsintids || [],
|
||||
typeintids: response.data.typeintids || []
|
||||
}
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
})
|
||||
|
|
@ -179,6 +179,40 @@
|
|||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否可拼团" align="center" prop="isgroup">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.fixed" :value="scope.row.isgroup"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="拼团价" align="center" prop="groupprice" v-if="scope.row.isgroup === 1">-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- <el-input-number v-model="scope.row.groupprice" :min="0" :step="0.01" :precision="2" placeholder="请输入拼团价" style="width: 200px" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="次卡服务" align="center" prop="isonce">-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- <dict-tag :options="dict.type.fixed" :value="scope.row.isonce"/>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="次卡价格" align="center" prop="onceprice" />-->
|
||||
<el-table-column label="分佣模式" align="center" prop="commissiontype">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_commissiontype" :value="scope.row.commissiontype"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="分佣比例" align="center" prop="commission" />
|
||||
<el-table-column label="派单模式" align="center" prop="dispatchtype">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.service_dispatch" :value="scope.row.dispatchtype"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="是否为一口价" align="center" prop="isfixed">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.fixed" :value="scope.row.isfixed"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="一口价价格" align="center" prop="fixedprice" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
|
@ -242,6 +276,8 @@
|
|||
<el-form-item label="保证金" prop="margin">
|
||||
<el-input v-model="form.margin" placeholder="请输入保证金" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="所需技能" prop="skillIds">
|
||||
<el-select
|
||||
v-model="form.skillIdsArray"
|
||||
|
|
@ -340,6 +376,76 @@
|
|||
style="width: 200px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否可拼团" prop="isgroup">
|
||||
<el-radio-group v-model="form.isgroup">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.fixed"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="拼团价" prop="groupprice" v-if="form.isgroup === 1">
|
||||
<el-input-number v-model="form.groupprice" :min="0" :step="0.01" :precision="2" placeholder="请输入拼团价" style="width: 200px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="成团人数" prop="groupnum" v-if="form.isgroup === 1">
|
||||
<el-input-number v-model="form.groupnum" :min="1" :max="100" placeholder="请输入成团人数" style="width: 200px" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="是否可设置次卡" prop="isonce">-->
|
||||
<!-- <el-radio-group v-model="form.isonce">-->
|
||||
<!-- <el-radio-->
|
||||
<!-- v-for="dict in dict.type.fixed"-->
|
||||
<!-- :key="dict.value"-->
|
||||
<!-- :label="parseInt(dict.value)"-->
|
||||
<!-- >{{dict.label}}</el-radio>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="次卡价格" prop="onceprice">-->
|
||||
<!-- <el-input v-model="form.onceprice" placeholder="请输入次卡价格" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="分佣模式" prop="commissiontype">
|
||||
<el-radio-group v-model="form.commissiontype">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_commissiontype"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="分佣比例" prop="commission" v-if="form.commissiontype === 2">
|
||||
<el-input-number v-model="form.commission" :min="0" :step="0.01" :precision="2" placeholder="请输入分佣比例" style="width: 200px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="派单模式" prop="dispatchtype">
|
||||
<el-radio-group v-model="form.dispatchtype">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.service_dispatch"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="指定工人集合" prop="workerids" v-if="form.dispatchtype === 3">
|
||||
<el-select v-model="form.workerids" multiple filterable placeholder="请选择工人" style="width: 100%">
|
||||
<el-option
|
||||
v-for="worker in listworkerlist"
|
||||
:key="worker.id"
|
||||
:label="worker.name + '(' + worker.phone + ')'"
|
||||
:value="worker.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否为一口价" prop="isfixed">
|
||||
<el-radio-group v-model="form.isfixed">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.fixed"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="一口价价格" prop="fixedprice" v-if="form.isfixed === 1">
|
||||
<el-input-number v-model="form.fixedprice" :min="0" :step="0.01" :precision="2" placeholder="请输入一口价价格" style="width: 200px"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-switch
|
||||
v-model="form.status"
|
||||
|
|
@ -413,12 +519,12 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus,selectServiceCateList,getSiteSkillList} from "@/api/system/ServiceGoods"
|
||||
import { listServiceGoods, getServiceGoods, delServiceGoods, addServiceGoods, updateServiceGoods ,changefenleiStatus,selectServiceCateList,getSiteSkillList,getlistworkerlist} from "@/api/system/ServiceGoods"
|
||||
import Editor from '@/components/Editor'
|
||||
|
||||
export default {
|
||||
name: "ServiceGoods",
|
||||
dicts: ['service_goods_status'],
|
||||
dicts: ['service_goods_status', 'fixed', 'service_commissiontype', 'service_dispatch'],
|
||||
components: { Editor },
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -433,7 +539,7 @@ export default {
|
|||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
|
||||
listworkerlist: [],
|
||||
serviceCateList: [],
|
||||
|
||||
siteSkillList : [],
|
||||
|
|
@ -514,6 +620,7 @@ export default {
|
|||
this.getserviceCateList();
|
||||
this.getSiteSkillList();
|
||||
this.testSkillList();
|
||||
this.getlistworkerdatalist();
|
||||
this.testJsonConversion(); // 测试JSON转换功能
|
||||
},
|
||||
watch: {
|
||||
|
|
@ -590,6 +697,17 @@ export default {
|
|||
margin: null,
|
||||
skillIds: null,
|
||||
skillIdsArray: [], // 重置技能数组
|
||||
isgroup: 2,
|
||||
groupprice: null,
|
||||
isonce: null,
|
||||
onceprice: null,
|
||||
commissiontype: 1,
|
||||
commission: null,
|
||||
dispatchtype: 1,
|
||||
workerids: null,
|
||||
groupnum: 0,
|
||||
isfixed: 2,
|
||||
fixedprice: null,
|
||||
createdAt: null,
|
||||
updatedAt: null,
|
||||
deletedAt: null
|
||||
|
|
@ -647,9 +765,18 @@ export default {
|
|||
row.status = row.status === "0" ? "1" : "0";
|
||||
});
|
||||
},
|
||||
|
||||
getlistworkerdatalist () {
|
||||
return getlistworkerlist().then(response => {
|
||||
this.listworkerlist = response.data
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.getlistworkerdatalist();
|
||||
// 确保技能数组和基检现象数组被正确初始化
|
||||
this.$set(this.form, 'skillIdsArray', []);
|
||||
this.$set(this.form, 'basicArray', []);
|
||||
|
|
@ -658,6 +785,8 @@ export default {
|
|||
// 重置基检现象标签输入状态
|
||||
this.showBasicInput = false;
|
||||
this.newBasicTag = '';
|
||||
// workerids 处理,新增时为空
|
||||
this.form.workerids = [];
|
||||
console.log('新增时初始化form:', this.form);
|
||||
|
||||
// 验证技能列表是否已加载
|
||||
|
|
@ -707,11 +836,12 @@ export default {
|
|||
},
|
||||
|
||||
|
||||
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
|
||||
this.getlistworkerdatalist();
|
||||
// 确保技能列表已加载
|
||||
const skillPromise = this.siteSkillList.length > 0 ?
|
||||
Promise.resolve(this.siteSkillList) :
|
||||
|
|
@ -871,6 +1001,18 @@ export default {
|
|||
}
|
||||
});
|
||||
|
||||
// workerids 处理,解析为数字数组
|
||||
if (this.form.workerids && typeof this.form.workerids === 'string') {
|
||||
try {
|
||||
const arr = JSON.parse(this.form.workerids);
|
||||
this.form.workerids = Array.isArray(arr) ? arr.map(id => Number(id)).filter(id => !isNaN(id)) : [];
|
||||
} catch (e) {
|
||||
this.form.workerids = [];
|
||||
}
|
||||
} else if (!this.form.workerids) {
|
||||
this.form.workerids = [];
|
||||
}
|
||||
|
||||
this.open = true
|
||||
this.title = "修改服务内容"
|
||||
}).catch(error => {
|
||||
|
|
@ -949,11 +1091,19 @@ export default {
|
|||
this.form.sort = parseInt(this.form.sort);
|
||||
}
|
||||
|
||||
console.log('最终提交的表单数据:', this.form);
|
||||
// 构造提交数据,避免直接修改 this.form
|
||||
const submitData = { ...this.form };
|
||||
// workerids 多选转数字数组并字符串化
|
||||
if (Array.isArray(submitData.workerids)) {
|
||||
const arr = submitData.workerids.map(id => Number(id)).filter(id => !isNaN(id));
|
||||
submitData.workerids = JSON.stringify(arr);
|
||||
}
|
||||
|
||||
console.log('最终提交的表单数据:', submitData);
|
||||
|
||||
// 提交表单
|
||||
if (this.form.id != null) {
|
||||
updateServiceGoods(this.form).then(response => {
|
||||
if (submitData.id != null) {
|
||||
updateServiceGoods(submitData).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
// 不自动关闭弹窗,让用户手动关闭
|
||||
this.getList(); // 刷新列表数据
|
||||
|
|
@ -962,7 +1112,7 @@ export default {
|
|||
this.$modal.msgError("修改失败,请检查输入数据");
|
||||
});
|
||||
} else {
|
||||
addServiceGoods(this.form).then(response => {
|
||||
addServiceGoods(submitData).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
// 不自动关闭弹窗,让用户手动关闭
|
||||
this.getList(); // 刷新列表数据
|
||||
|
|
@ -1134,17 +1284,17 @@ export default {
|
|||
console.log('规格类型变化:', value);
|
||||
this.skuType = value;
|
||||
// 重置规格数据
|
||||
if (value === 1) {
|
||||
// 单规格模式,重置为空对象
|
||||
this.form.skuName = '';
|
||||
this.form.skuValue = '';
|
||||
this.form.sku = {};
|
||||
} else {
|
||||
// 多规格模式,重置为空对象
|
||||
this.form.sku = {};
|
||||
this.form.skuName = '';
|
||||
this.form.skuValue = '';
|
||||
}
|
||||
// if (value === 1) {
|
||||
// // 单规格模式,重置为空对象
|
||||
// this.form.skuName = '';
|
||||
// this.form.skuValue = '';
|
||||
// this.form.sku = {};
|
||||
// } else {
|
||||
// // 多规格模式,重置为空对象
|
||||
// this.form.sku = {};
|
||||
// this.form.skuName = '';
|
||||
// this.form.skuValue = '';
|
||||
// }
|
||||
},
|
||||
// 技能选择变化处理
|
||||
handleSkillChange(value) {
|
||||
|
|
|
|||
|
|
@ -19,10 +19,51 @@
|
|||
<el-form-item label="消费金">
|
||||
<el-input-number v-model="baseForm.consumption" :min="0" :max="100" />
|
||||
<span style="margin-left: 8px">%</span>
|
||||
<el-tooltip content="用户支付服务费用后根据用户的实际支付换算得到的消费金比例" placement="right">
|
||||
<i class="el-icon-question" style="margin-left: 8px; color: #999" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务金">
|
||||
<el-input-number v-model="baseForm.servicefee" :min="0" :max="100" />
|
||||
<span style="margin-left: 8px">%</span>
|
||||
<el-tooltip content="用户支付商品费用后根据用户的实际支付换算得到的服务金比例" placement="right">
|
||||
<i class="el-icon-question" style="margin-left: 8px; color: #999" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="消费金抵扣比例">
|
||||
<el-input-number v-model="baseForm.consumption_deduction" :min="0" :max="100" />
|
||||
<span style="margin-left: 8px">%</span>
|
||||
<el-tooltip content="用户支付订单时可用消费金抵扣的最大比例" placement="right">
|
||||
<i class="el-icon-question" style="margin-left: 8px; color: #999" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务金抵扣比例">
|
||||
<el-input-number v-model="baseForm.service_deduction" :min="0" :max="100" />
|
||||
<span style="margin-left: 8px">%</span>
|
||||
<el-tooltip content="用户支付订单时可用服务金抵扣的最大比例" placement="right">
|
||||
<i class="el-icon-question" style="margin-left: 8px; color: #999" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料分佣">
|
||||
<el-input-number v-model="baseForm.material_commissions" :min="0" :max="100" />
|
||||
<span style="margin-left: 8px">%</span>
|
||||
<el-tooltip content="平台统一设置,师傅使用物料后师傅所得物料分佣的比例" placement="right">
|
||||
<i class="el-icon-question" style="margin-left: 8px; color: #999" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="会员优惠">
|
||||
<el-input-number v-model="baseForm.member_discount" :min="0" :max="100" />
|
||||
<span style="margin-left: 8px">%</span>
|
||||
<el-tooltip content="包年会员在平台消费进行的折扣" placement="right">
|
||||
<i class="el-icon-question" style="margin-left: 8px; color: #999" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="充值附送比例">
|
||||
<el-input-number v-model="baseForm.recharge_discount" :min="0" :max="100" />
|
||||
<span style="margin-left: 8px">%</span>
|
||||
<el-tooltip content="用户充值时按照用户充值金额的比例进行赠送" placement="right">
|
||||
<i class="el-icon-question" style="margin-left: 8px; color: #999" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="下单送积分">
|
||||
<el-input v-model="baseForm.orderScore" style="width: 120px" />
|
||||
|
|
@ -173,6 +214,11 @@ export default {
|
|||
marginRate: 10,
|
||||
consumption: 0,
|
||||
servicefee: 0,
|
||||
material_commissions: 10,
|
||||
member_discount: 80,
|
||||
recharge_discount: 0,
|
||||
consumption_deduction: 0,
|
||||
service_deduction: 0,
|
||||
orderScore: 100,
|
||||
hotwords: ['水电维修', '家电清洗', '灯具维修', '墙面翻新', '门窗家具', '疏通维修', '防水维修'],
|
||||
qrUrl: ''
|
||||
|
|
@ -222,6 +268,11 @@ export default {
|
|||
marginRate: configOneObj.margin || 10,
|
||||
consumption: configOneObj.consumption || 0,
|
||||
servicefee: configOneObj.servicefee || 0,
|
||||
material_commissions: configOneObj.material_commissions || 10,
|
||||
member_discount: configOneObj.member_discount || 80,
|
||||
recharge_discount: configOneObj.recharge_discount || 0,
|
||||
consumption_deduction: configOneObj.consumption_deduction || 0,
|
||||
service_deduction: configOneObj.service_deduction || 0,
|
||||
orderScore: configOneObj.orderScore || 100,
|
||||
hotwords: configOneObj.hot || [],
|
||||
qrUrl: configOneObj.kf || '',
|
||||
|
|
@ -354,6 +405,11 @@ export default {
|
|||
margin: this.baseForm.marginRate,
|
||||
consumption: this.baseForm.consumption,
|
||||
servicefee: this.baseForm.servicefee,
|
||||
material_commissions: this.baseForm.material_commissions,
|
||||
member_discount: this.baseForm.member_discount,
|
||||
recharge_discount: this.baseForm.recharge_discount,
|
||||
consumption_deduction: this.baseForm.consumption_deduction,
|
||||
service_deduction: this.baseForm.service_deduction,
|
||||
orderScore: this.baseForm.orderScore,
|
||||
hot: this.baseForm.hotwords,
|
||||
kf: this.baseForm.qrUrl
|
||||
|
|
|
|||
|
|
@ -197,7 +197,19 @@
|
|||
<span>{{ parseTime(scope.row.workerTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="等级" align="center" prop="level" />
|
||||
<el-table-column label="等级" align="center" prop="level">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.level" @change="handleRowClick(scope.row)">
|
||||
<el-option
|
||||
v-for="item in levelList"
|
||||
:key="item.id"
|
||||
:label="item.title"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
<!-- <el-link type="primary" @click="showWorkerLevelDialog(scope.row)">{{ scope.row.level }}</el-link>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="当前佣金" align="center" prop="commission" />
|
||||
<el-table-column label="累计佣金" align="center" prop="totalComm">
|
||||
<template slot-scope="scope">
|
||||
|
|
@ -246,18 +258,28 @@
|
|||
<el-dialog :title="'师傅佣金明细'" :visible.sync="workerMoneyLogDialogVisible" width="70%" top="5vh" append-to-body>
|
||||
<worker-money-log-table :worker-id="currentWorkerId" @close="workerMoneyLogDialogVisible = false" />
|
||||
</el-dialog>
|
||||
|
||||
<WorkerLevelSelectDialog
|
||||
:visible.sync="workerLevelDialogVisible"
|
||||
:user-id="workerLevelUserId"
|
||||
:user-name="workerLevelUserName"
|
||||
@level-selected="handleWorkerLevelSelected"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listUsers, getUsers, delUsers, addUsers, updateUsers,getUserDataList,changetypeStatus } from "@/api/system/users"
|
||||
import { listWorkerLevel } from '@/api/system/WorkerLevel'
|
||||
import UserEditDialog from './UserEditDialog.vue'
|
||||
import WorkerMoneyLogTable from '@/views/system/workerMoneyLog/WorkerMoneyLogTable.vue'
|
||||
import WorkerLevelSelectDialog from '../workerLevelSelect/WorkerLevelSelectDialog.vue'
|
||||
|
||||
|
||||
export default {
|
||||
name: "Users",
|
||||
dicts: ['users_status','users_login_status'],
|
||||
components: { UserEditDialog, WorkerMoneyLogTable },
|
||||
components: { UserEditDialog, WorkerMoneyLogTable, WorkerLevelSelectDialog },
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
@ -272,6 +294,9 @@ export default {
|
|||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
levelList: [],
|
||||
|
||||
userDataList: [],
|
||||
// 用户列表表格数据
|
||||
usersList: [],
|
||||
|
|
@ -314,10 +339,14 @@ export default {
|
|||
editMode: 'add',
|
||||
workerMoneyLogDialogVisible: false,
|
||||
currentWorkerId: null,
|
||||
workerLevelDialogVisible: false,
|
||||
workerLevelUserId: null,
|
||||
workerLevelUserName: '',
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
this.getlevelList();
|
||||
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -376,6 +405,13 @@ export default {
|
|||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
|
||||
getlevelList(){
|
||||
listWorkerLevel().then(response => {
|
||||
this.levelList = response.rows
|
||||
})
|
||||
},
|
||||
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm")
|
||||
|
|
@ -387,7 +423,13 @@ export default {
|
|||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
handleRowClick(row) {
|
||||
|
||||
updateUsers(row).then(() => {
|
||||
this.$message.success('修改成功')
|
||||
|
||||
})
|
||||
},
|
||||
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
|
|
@ -481,6 +523,15 @@ export default {
|
|||
this.currentWorkerId = row.id;
|
||||
this.workerMoneyLogDialogVisible = true;
|
||||
},
|
||||
showWorkerLevelDialog(row) {
|
||||
this.workerLevelUserId = row.id;
|
||||
this.workerLevelUserName = row.name;
|
||||
this.workerLevelDialogVisible = true;
|
||||
},
|
||||
handleWorkerLevelSelected() {
|
||||
this.workerLevelDialogVisible = false;
|
||||
this.getList(); // 选中后刷新列表
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,42 +1,42 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-form-item label="订单id" prop="orderid">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
v-model="queryParams.orderid"
|
||||
placeholder="请输入订单id"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-select v-model="queryParams.goodId" filterable placeholder="请选择服务项目" clearable>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option
|
||||
v-for="type in typeDataList"
|
||||
:key="type.id"
|
||||
:label="type.title"
|
||||
:value="type.id"
|
||||
></el-option>
|
||||
v-for="dict in dict.type.group_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-form-item label="用户姓名" prop="uname">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
v-model="queryParams.uname"
|
||||
placeholder="请输入用户姓名"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input
|
||||
v-model="queryParams.unit"
|
||||
placeholder="请输入单位"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
<el-form-item label="支付类别" prop="paytype">
|
||||
<el-select v-model="queryParams.paytype" placeholder="请选择支付类别" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.pay_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
v-hasPermi="['system:buying:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
|
|
@ -62,7 +62,7 @@
|
|||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
v-hasPermi="['system:buying:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
v-hasPermi="['system:buying:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
|
|
@ -83,45 +83,50 @@
|
|||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
v-hasPermi="['system:buying:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table v-loading="loading" :data="buyingList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<el-table-column label="主键id" align="center" prop="id" />
|
||||
<el-table-column label="订单id" align="center" prop="orderid" />
|
||||
<el-table-column label="支付金额" align="center" prop="money" />
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
<dict-tag :options="dict.type.group_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<el-table-column label="优惠金额" align="center" prop="deduction" />
|
||||
<el-table-column label="用户姓名" align="center" prop="uname" />
|
||||
<el-table-column label="支付时间" align="center" prop="paytime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
<span>{{ parseTime(scope.row.paytime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<el-table-column label="支付订单号" align="center" prop="transactionId" />
|
||||
<el-table-column label="支付类别" align="center" prop="paytype">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.pay_type" :value="scope.row.paytype"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
v-hasPermi="['system:buying:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
v-hasPermi="['system:buying:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -135,38 +140,70 @@
|
|||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<!-- 添加或修改拼团专区管理对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
<el-form-item label="订单id" prop="orderid">
|
||||
<el-input v-model="form.orderid" placeholder="请输入订单id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
<el-form-item label="用户id" prop="uid">
|
||||
<el-input v-model="form.uid" placeholder="请输入用户id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
<el-form-item label="支付金额" prop="money">
|
||||
<el-input v-model="form.money" placeholder="请输入支付金额" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.group_status"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
<el-form-item label="优惠金额" prop="deduction">
|
||||
<el-input v-model="form.deduction" placeholder="请输入优惠金额" />
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-form-item label="用户姓名" prop="uname">
|
||||
<el-input v-model="form.uname" placeholder="请输入用户姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付时间" prop="paytime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.paytime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择支付时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付订单号" prop="transactionId">
|
||||
<el-input v-model="form.transactionId" placeholder="请输入支付订单号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付类别" prop="paytype">
|
||||
<el-radio-group v-model="form.paytype">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.pay_type"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="服务商品id" prop="productId">
|
||||
<el-input v-model="form.productId" placeholder="请输入服务商品id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
placeholder="请选择创建时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-form-item label="修改时间" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
placeholder="请选择修改时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
|
@ -179,10 +216,11 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { listBuying, getBuying, delBuying, addBuying, updateBuying } from "@/api/system/buying"
|
||||
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
name: "Buying",
|
||||
dicts: ['pay_type', 'group_status'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
@ -197,10 +235,8 @@ export default {
|
|||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
|
||||
typeDataList: [],
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 拼团专区管理表格数据
|
||||
buyingList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
|
|
@ -209,33 +245,15 @@ export default {
|
|||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
orderid: null,
|
||||
status: null,
|
||||
uname: null,
|
||||
paytype: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -243,11 +261,11 @@ export default {
|
|||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
/** 查询拼团专区管理列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
listBuying(this.queryParams).then(response => {
|
||||
this.buyingList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
|
|
@ -261,11 +279,16 @@ export default {
|
|||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
orderid: null,
|
||||
uid: null,
|
||||
money: null,
|
||||
status: null,
|
||||
deduction: null,
|
||||
uname: null,
|
||||
paytime: null,
|
||||
transactionId: null,
|
||||
paytype: null,
|
||||
productId: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
|
|
@ -291,16 +314,16 @@ export default {
|
|||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
this.title = "添加拼团专区管理"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
getBuying(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
this.title = "修改拼团专区管理"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
|
|
@ -308,13 +331,13 @@ export default {
|
|||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
updateBuying(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
addBuying(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
|
|
@ -326,8 +349,8 @@ export default {
|
|||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
this.$modal.confirm('是否确认删除拼团专区管理编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delBuying(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
|
|
@ -335,9 +358,9 @@ export default {
|
|||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
this.download('system/buying/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}, `buying_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,38 +17,6 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="纳税人识别号" prop="taxNumber">
|
||||
<el-input
|
||||
v-model="queryParams.taxNumber"
|
||||
placeholder="请输入纳税人识别号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="开户银行" prop="bankName">
|
||||
<el-input
|
||||
v-model="queryParams.bankName"
|
||||
placeholder="请输入开户银行"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="银行账号" prop="bankAccount">
|
||||
<el-input
|
||||
v-model="queryParams.bankAccount"
|
||||
placeholder="请输入银行账号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位地址" prop="address">
|
||||
<el-input
|
||||
v-model="queryParams.address"
|
||||
placeholder="请输入单位地址"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话" prop="phone">
|
||||
<el-input
|
||||
v-model="queryParams.phone"
|
||||
|
|
@ -91,6 +59,24 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="开票内容" prop="invoicetext">
|
||||
<el-input
|
||||
v-model="queryParams.invoicetext"
|
||||
placeholder="请输入开票内容"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="开票状态 1:未开票 2:已开票" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择开票状态 1:未开票 2:已开票" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.invoice_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
|
|
@ -170,11 +156,15 @@
|
|||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="修改时间" align="center" prop="updatedAt" width="180">
|
||||
<el-table-column label="开票金额" align="center" prop="invoicemoney" />
|
||||
<el-table-column label="开票内容" align="center" prop="invoicetext" />
|
||||
<el-table-column label="开票订单号" align="center" prop="orderid" />
|
||||
<el-table-column label="开票状态 1:未开票 2:已开票" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
<dict-tag :options="dict.type.invoice_status" :value="scope.row.status"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发票附件" align="center" prop="filedata" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
|
@ -262,6 +252,27 @@
|
|||
placeholder="请选择修改时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="开票金额" prop="invoicemoney">
|
||||
<el-input v-model="form.invoicemoney" placeholder="请输入开票金额" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开票内容" prop="invoicetext">
|
||||
<el-input v-model="form.invoicetext" placeholder="请输入开票内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开票订单号" prop="orderid">
|
||||
<el-input v-model="form.orderid" placeholder="请输入开票订单号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开票状态 1:未开票 2:已开票" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio
|
||||
v-for="dict in dict.type.invoice_status"
|
||||
:key="dict.value"
|
||||
:label="parseInt(dict.value)"
|
||||
>{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="发票附件" prop="filedata">
|
||||
<file-upload v-model="form.filedata"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
|
|
@ -276,7 +287,7 @@ import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/system/in
|
|||
|
||||
export default {
|
||||
name: "Info",
|
||||
dicts: ['invoice_type'],
|
||||
dicts: ['invoice_status', 'invoice_type'],
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
@ -303,15 +314,13 @@ export default {
|
|||
pageSize: 10,
|
||||
uid: null,
|
||||
invoiceTitle: null,
|
||||
taxNumber: null,
|
||||
bankName: null,
|
||||
bankAccount: null,
|
||||
address: null,
|
||||
phone: null,
|
||||
email: null,
|
||||
wechat: null,
|
||||
type: null,
|
||||
category: null,
|
||||
invoicetext: null,
|
||||
status: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
|
|
@ -354,7 +363,12 @@ export default {
|
|||
type: null,
|
||||
category: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
updatedAt: null,
|
||||
invoicemoney: null,
|
||||
invoicetext: null,
|
||||
orderid: null,
|
||||
status: null,
|
||||
filedata: null
|
||||
}
|
||||
this.resetForm("form")
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,32 +1,38 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-form-item label="订单id" prop="orderid">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
v-model="queryParams.orderid"
|
||||
placeholder="请输入订单id"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-form-item label="师傅id" prop="workerid">
|
||||
<el-input
|
||||
v-model="queryParams.price"
|
||||
placeholder="请输入价格"
|
||||
v-model="queryParams.workerid"
|
||||
placeholder="请输入师傅id"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-form-item label="师傅姓名" prop="workername">
|
||||
<el-input
|
||||
v-model="queryParams.unit"
|
||||
placeholder="请输入单位"
|
||||
v-model="queryParams.workername"
|
||||
placeholder="请输入师傅姓名"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="报价时间" prop="quotationTime">
|
||||
<el-date-picker clearable
|
||||
v-model="queryParams.quotationTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择报价时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
|
|
@ -41,7 +47,7 @@
|
|||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:QuoteMaterial:add']"
|
||||
v-hasPermi="['system:quotation:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
|
|
@ -52,7 +58,7 @@
|
|||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
v-hasPermi="['system:quotation:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
|
|
@ -63,7 +69,7 @@
|
|||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
v-hasPermi="['system:quotation:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
|
|
@ -73,45 +79,44 @@
|
|||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:QuoteMaterial:export']"
|
||||
v-hasPermi="['system:quotation:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="QuoteMaterialList" @selection-change="handleSelectionChange">
|
||||
<el-table v-loading="loading" :data="quotationList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" width="55" prop="id" />
|
||||
<el-table-column label="服务项目" align="center" prop="serviceName" />
|
||||
<el-table-column label="类型" align="center" prop="typeName" />
|
||||
<el-table-column label="标题" align="center" width="175" prop="title" />
|
||||
<el-table-column label="价格" align="center" width="75" prop="price" />
|
||||
<el-table-column label="单位" align="center" width="115" prop="unit" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdAt" width="150">
|
||||
<el-table-column label="${comment}" align="center" prop="id" />
|
||||
<el-table-column label="订单id" align="center" prop="orderid" />
|
||||
<el-table-column label="报价金额" align="center" prop="money" />
|
||||
<el-table-column label="师傅id" align="center" prop="workerid" />
|
||||
<el-table-column label="师傅姓名" align="center" prop="workername" />
|
||||
<el-table-column label="师傅图像" align="center" prop="workerimage" width="100">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
|
||||
<image-preview :src="scope.row.workerimage" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updatedAt" width="150">
|
||||
<el-table-column label="报价时间" align="center" prop="quotationTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
|
||||
<span>{{ parseTime(scope.row.quotationTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:edit']"
|
||||
v-hasPermi="['system:quotation:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:QuoteMaterial:remove']"
|
||||
v-hasPermi="['system:quotation:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -125,38 +130,46 @@
|
|||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改项目报价--物料信息对话框 -->
|
||||
<!-- 添加或修改需求报价对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="服务项目" prop="goodId">
|
||||
<el-input v-model="form.goodId" type="textarea" placeholder="请输入内容" />
|
||||
<el-form-item label="订单id" prop="orderid">
|
||||
<el-input v-model="form.orderid" placeholder="请输入订单id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="typeId">
|
||||
<el-input v-model="form.typeId" type="textarea" placeholder="请输入内容" />
|
||||
<el-form-item label="报价金额" prop="money">
|
||||
<el-input v-model="form.money" placeholder="请输入报价金额" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
<el-form-item label="师傅id" prop="workerid">
|
||||
<el-input v-model="form.workerid" placeholder="请输入师傅id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入价格" />
|
||||
<el-form-item label="师傅姓名" prop="workername">
|
||||
<el-input v-model="form.workername" placeholder="请输入师傅姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
<el-form-item label="师傅图像" prop="workerimage">
|
||||
<image-upload v-model="form.workerimage"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="createdAt">
|
||||
<el-form-item label="报价时间" prop="quotationTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.quotationTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择报价时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createdAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.createdAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
placeholder="请选择创建时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="${comment}" prop="updatedAt">
|
||||
<el-form-item label="修改时间" prop="updatedAt">
|
||||
<el-date-picker clearable
|
||||
v-model="form.updatedAt"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择${comment}">
|
||||
placeholder="请选择修改时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
|
@ -169,10 +182,10 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { listQuoteMaterial, getQuoteMaterial, delQuoteMaterial, addQuoteMaterial, updateQuoteMaterial } from "@/api/system/QuoteMaterial"
|
||||
import { listQuotation, getQuotation, delQuotation, addQuotation, updateQuotation } from "@/api/system/quotation"
|
||||
|
||||
export default {
|
||||
name: "QuoteMaterial",
|
||||
name: "Quotation",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
@ -187,8 +200,8 @@ export default {
|
|||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 项目报价--物料信息表格数据
|
||||
QuoteMaterialList: [],
|
||||
// 需求报价表格数据
|
||||
quotationList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
|
|
@ -197,33 +210,17 @@ export default {
|
|||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
orderid: null,
|
||||
workerid: null,
|
||||
workername: null,
|
||||
status: null,
|
||||
workerimage: null,
|
||||
quotationTime: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
goodId: [
|
||||
{ required: true, message: "服务项目不能为空", trigger: "blur" }
|
||||
],
|
||||
typeId: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
],
|
||||
title: [
|
||||
{ required: true, message: "标题不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "价格不能为空", trigger: "blur" }
|
||||
],
|
||||
unit: [
|
||||
{ required: true, message: "单位不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -231,11 +228,11 @@ export default {
|
|||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
/** 查询项目报价--物料信息列表 */
|
||||
/** 查询需求报价列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
listQuoteMaterial(this.queryParams).then(response => {
|
||||
this.QuoteMaterialList = response.rows
|
||||
listQuotation(this.queryParams).then(response => {
|
||||
this.quotationList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
|
|
@ -249,11 +246,13 @@ export default {
|
|||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
goodId: null,
|
||||
typeId: null,
|
||||
title: null,
|
||||
price: null,
|
||||
unit: null,
|
||||
orderid: null,
|
||||
money: null,
|
||||
workerid: null,
|
||||
workername: null,
|
||||
status: null,
|
||||
workerimage: null,
|
||||
quotationTime: null,
|
||||
createdAt: null,
|
||||
updatedAt: null
|
||||
}
|
||||
|
|
@ -279,16 +278,16 @@ export default {
|
|||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = "添加项目报价--物料信息"
|
||||
this.title = "添加需求报价"
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const id = row.id || this.ids
|
||||
getQuoteMaterial(id).then(response => {
|
||||
getQuotation(id).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = "修改项目报价--物料信息"
|
||||
this.title = "修改需求报价"
|
||||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
|
|
@ -296,13 +295,13 @@ export default {
|
|||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateQuoteMaterial(this.form).then(response => {
|
||||
updateQuotation(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
addQuoteMaterial(this.form).then(response => {
|
||||
addQuotation(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
|
|
@ -314,8 +313,8 @@ export default {
|
|||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids
|
||||
this.$modal.confirm('是否确认删除项目报价--物料信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuoteMaterial(ids)
|
||||
this.$modal.confirm('是否确认删除需求报价编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delQuotation(ids)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess("删除成功")
|
||||
|
|
@ -323,9 +322,9 @@ export default {
|
|||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/QuoteMaterial/export', {
|
||||
this.download('system/quotation/export', {
|
||||
...this.queryParams
|
||||
}, `QuoteMaterial_${new Date().getTime()}.xlsx`)
|
||||
}, `quotation_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
<template>
|
||||
<el-dialog :title="'选择等级(' + userName + ')'" :visible.sync="visible" width="600px" @close="$emit('update:visible', false)">
|
||||
<el-table :data="levelList" v-loading="loading" @row-click="handleRowClick" highlight-current-row>
|
||||
<el-table-column prop="id" label="ID" width="60" />
|
||||
<el-table-column label="等级1111" align="center" prop="level" />
|
||||
<el-table-column label="等级名称" align="center" prop="title" />
|
||||
<el-table-column label="服务总额" align="center" prop="totalPrice" />
|
||||
<el-table-column label="佣金比例" align="center" prop="cr" />
|
||||
<el-table-column label="等级图标" align="center" prop="image" width="100">
|
||||
<template slot-scope="scope">
|
||||
<image-preview :src="scope.row.image" :width="50" :height="50"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="$emit('update:visible', false)">关闭</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listWorkerLevel } from '@/api/system/WorkerLevel'
|
||||
import { updateUsers, getUsers } from '@/api/system/users'
|
||||
export default {
|
||||
name: 'WorkerLevelSelectDialog',
|
||||
props: {
|
||||
visible: { type: Boolean, required: true },
|
||||
userId: { type: [String, Number], required: true },
|
||||
userName: { type: String, default: '' }
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
levelList: [],
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
visible(val) {
|
||||
if (val) this.fetchLevels()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fetchLevels() {
|
||||
this.loading = true
|
||||
listWorkerLevel().then(res => {
|
||||
this.levelList = res.rows || []
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
handleRowClick(row) {
|
||||
// 获取用户信息,修改等级
|
||||
getUsers(this.userId).then(res => {
|
||||
const user = { ...res.data, level: row.level }
|
||||
updateUsers(user).then(() => {
|
||||
this.$message.success('修改成功')
|
||||
this.$emit('level-selected')
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Loading…
Reference in New Issue