| | |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | <!-- |
| | | element-loading-background="rgba(0, 0, 0, 0.1)" |
| | | element-loading-spinner="el-icon-loading" |
| | | element-loading-text="正在加载中..." --> |
| | | <template> |
| | | <el-table v-loading="loading" style="width: 100%" :data="packageList" @selection-change="handleSelectionChange" |
| | | border> |
| | | <el-table-column fixed type="selection" width="40" align="center" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="序号" align="center" width="50" prop="newID" fixed /> |
| | | <!-- <el-table-column label="编号" align="center" prop="pacId" /> --> |
| | | <el-table-column label="体检类别" width="100px" align="center" prop="categoryNames" fixed> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.dict_tjtype" :value="scope.row.tjCategory" /> |
| | |
| | | <el-table-column label="套餐名称" align="center" prop="pacName" width="150px" fixed /> |
| | | <el-table-column label="原价" width="80px" align="center" prop="price" fixed></el-table-column> |
| | | <el-table-column label="折扣" width="80px" align="center" prop="limits" fixed></el-table-column> |
| | | <el-table-column label="现价" width="80px" align="center" prop="newPrice" fixed> |
| | | </el-table-column> |
| | | <el-table-column label="单项列表" align="center" prop="allProName" width="1200px"> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | label="项目明细" |
| | | align="center" |
| | | prop="allSonName" |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | </el-table-column>--> |
| | | <el-table-column label="现价" width="80px" align="center" prop="newPrice" fixed></el-table-column> |
| | | <el-table-column label="单项列表" align="center" prop="allProName" width="1200px"></el-table-column> |
| | | <el-table-column label="套餐描述" align="center" :show-overflow-tooltip="true" width="120px"> |
| | | <template slot-scope="scope"> |
| | | <div class="showInline">{{ scope.row.pacRemark }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | label="图片" |
| | | align="center" |
| | | prop="pacPhone" |
| | | width="100" |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <image-preview :src="scope.row.pacPhone" :width="50" :height="50" /> |
| | | </template> |
| | | </el-table-column> --> |
| | | |
| | | <el-table-column label="关键字" width="110px" align="center" prop="keyNames"></el-table-column> |
| | | <el-table-column label="是否上架" width="94px" align="center" prop="isOnSale"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.isOnSale" /> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | label="详细介绍" |
| | | :show-overflow-tooltip="true" |
| | | width="100px" |
| | | align="center" |
| | | prop="detail" |
| | | ></el-table-column> --> |
| | | <el-table-column label="排序" width="50px" align="center" prop="sort"></el-table-column> |
| | | <el-table-column label="小程序价格" width="90px" align="center" prop="retailPrice"></el-table-column> |
| | | <!-- <el-table-column |
| | | label="原价" |
| | | width="90px" |
| | | align="center" |
| | | prop="counterPrice" |
| | | ></el-table-column> --> |
| | | <el-table-column label="已售数量" width="90px" align="center" prop="saleNum"></el-table-column> |
| | | <el-table-column label="状态" align="center" prop="pacStatus" fixed="right" width="100px"> |
| | | <template slot-scope="scope"> |
| | |
| | | v-hasPermi="['system:package:edit']" title="修改"></el-button> |
| | | <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:package:remove']" title="删除"></el-button> |
| | | <!-- <el-button size="mini" type="text" icon="el-icon-circle-check" @click="handleSeach(scope.row)" |
| | | v-hasPermi="['system:package:Seach']" title="套餐详情"></el-button> --> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <!-- 修改体检套餐对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="1400px" append-to-body :close-on-click-modal="false"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px" :inline="true"> |
| | | <!-- <div class="dialo"> |
| | | <div class="dialo1"> --> |
| | | <el-form-item label="套餐名称" prop="pacName"> |
| | | <span slot="label" style="display: inline-block; border-bottom: 2px solid blue" @click="handlePackage"> |
| | | 套餐名称 |
| | |
| | | <el-input v-model="form.pacName" placeholder="请输入套餐名称" style="width: 150px" /> |
| | | </el-form-item> |
| | | <el-form-item label="套餐状态" prop="pacStatus"> |
| | | <!-- <el-radio-group v-model="form.pacStatus"> |
| | | <el-radio :label="0">启用</el-radio> |
| | | <el-radio :label="1">停用</el-radio> |
| | | </el-radio-group> --> |
| | | <el-select v-model="form.pacStatus" placeholder="请选择状态" style="width: 150px" filterable clearable> |
| | | <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" |
| | | :value="dict.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <!-- <el-form-item label="套餐类目" prop="categoryId"> |
| | | <el-select |
| | | v-model="form.categoryId" |
| | | placeholder="请选择套餐类目" |
| | | style="width: 150px" |
| | | @change="shangpin" |
| | | filterable |
| | | clearablez |
| | | > |
| | | <el-option |
| | | v-for="item in categoryList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> --> |
| | | <el-form-item label="体检类别" prop="tjCategory"> |
| | | <el-select v-model="form.tjCategory" placeholder="请选择体检类别" style="width: 150px" filterable clearable> |
| | | <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label" |
| | | :value="dict.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="是否上架" prop="isOnSale"> |
| | | <!-- <el-radio-group v-model="form.pacStatus"> |
| | | <el-radio :label="0">启用</el-radio> |
| | | <el-radio :label="1">停用</el-radio> |
| | | </el-radio-group> --> |
| | | <el-select v-model="form.isOnSale" placeholder="请选择是否上架" style="width: 140px" filterable clearable> |
| | | <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label" |
| | | :value="dict.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="排序" prop="sort"> |
| | | <el-input v-model="form.sort" placeholder="请输入排序" style="width: 150px" /> |
| | | </el-form-item> |
| | |
| | | <el-input v-model="form.retailPrice" placeholder="请输入小程序价格" style="width: 150px" /> |
| | | </el-form-item> |
| | | <el-form-item label="原价" prop="pics"> |
| | | <el-input v-model="pics" placeholder="请输入原价" style="width: 150px" /> |
| | | <el-input v-model="pics" placeholder="请输入原价" style="width: 150px" type="number" /> |
| | | </el-form-item> |
| | | <el-form-item label="折扣"> |
| | | <el-input-number style="width: 150px" v-model="youhui" :precision="2" :step="0.1" :max="10" :min="0.1" |
| | | @change="debounceNumberChange" :debounce="3000"></el-input-number> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="现价" prop="xianprice"> |
| | | <el-input v-model="form.xianprice" placeholder="现价" clearable style="width: 140px" @input="changeXianjia" |
| | | type="number" :debounce="3000" min="0"/> |
| | |
| | | <el-option v-for="item in keywordList" :key="item.id" :label="item.keyword" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <div v-if="!isCollapsed" style="display: flex"> |
| | | <div> |
| | | <el-form-item label="套餐描述" prop="pacRemark"> |
| | |
| | | rows="2"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="详细介绍" prop="detail"> |
| | | <!-- <el-input |
| | | v-model="form.detail" |
| | | placeholder="请输入详细介绍" |
| | | style="width: 200px" |
| | | /> --> |
| | | <editor v-model="form.detail" :min-height="192" style="width: 670px" /> |
| | | </el-form-item> |
| | | </div> |
| | | <!-- </div> --> |
| | | <div class="dialo2"> |
| | | <el-form-item label="图片"> |
| | | <image-upload v-model="form.pacPhone" /> |
| | | </el-form-item> |
| | | </div> |
| | | <!-- </div> --> |
| | | </div> |
| | | </el-form> |
| | | <el-button type="primary" plain size="mini" @click="toggleCollapse">{{ |
| | | isCollapsed ? "展开" : "收起" |
| | | }}</el-button> |
| | | <!-- <el-button type="primary" plain size="mini" icon="el-icon-plus" @click="addmembers()">新增单项</el-button> |
| | | <el-table v-loading="loading" :data="form.tjProjectList" @selection-change="handleSelectionChange" border |
| | | max-height="275" style="margin: 10px 0"> |
| | | <el-table-column label="序号" align="center" type="index" /> |
| | | <el-table-column label="项目名称" align="center" prop="proName" width="180px"> |
| | | <template slot-scope="scope"> |
| | | <el-select filterable v-model="scope.row.proName" placeholder="请选择项目名称" @change="getSelectValue"> |
| | | <el-option v-for="(item, index) in allList" :key="index" :label="item.proName" :value="item.proName"> |
| | | </el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="项目明细" align="center" prop="allSonProName" width="400px" :show-overflow-tooltip="true"> |
| | | </el-table-column> |
| | | <el-table-column label="原价(元)" align="center" prop="proPrice" width="80px" /> |
| | | <el-table-column label="现价(元)" align="center" prop="priceNow" width="80px"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.priceNow" autocomplete="off" placeholder="请输入内容"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="text" icon="el-icon-circle-plus-outline" @click="addmembers(scope.row)" |
| | | v-hasPermi="['system:package:edit']" title="新增行"></el-button> |
| | | <el-button size="mini" type="text" icon="el-icon-delete" @click.native.prevent="Delete(scope.$index)" |
| | | v-hasPermi="['hosp:consumables:remove']" title="删除"></el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> --> |
| | | |
| | | <el-row style="display: flex; width: 1300px"> |
| | | <el-col> |
| | | <div style="text-align: center; margin-bottom: 10px; margin-top: 10px"> |
| | |
| | | :limit.sync="queryParams1.pageSize" @pagination="getDataList" /> |
| | | </div> |
| | | </el-col> |
| | | <!-- <el-col :span="6"> |
| | | <div |
| | | style="text-align: center; margin-bottom: 10px; margin-top: 10px" |
| | | > |
| | | 明细项目列表 |
| | | </div> |
| | | <div class="tab3"> |
| | | <el-tree |
| | | class="filter-tree" |
| | | v-loading="loading" |
| | | :data="TreedataList" |
| | | node-key="proId" |
| | | :props="defaultProps" |
| | | :filter-node-method="filterNode" |
| | | show-checkbox |
| | | @check-change="handleCurrentChecked1" |
| | | :default-checked-keys="checkedListkey" |
| | | ref="trees" |
| | | :render-content="renderContent" |
| | | > |
| | | </el-tree> |
| | | </div> |
| | | </el-col> --> |
| | | <el-col> |
| | | <div class="grid-content bg-purple"> |
| | | <div style=" |
| | |
| | | :span-method="objectSpanMethod"> |
| | | <el-table-column prop="proName" label="检查项目"> |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="priceOrd" label="原价" align="center" width="80px"> |
| | | </el-table-column> |
| | | <el-table-column label="折扣" width="100px"> |
| | | <template slot-scope="scope"> |
| | | <!-- 只输入纯数字折扣 --> |
| | | <el-input v-model.number="scope.row.limits" @input="calculateDiscount(scope.row)" placeholder="输入折扣" |
| | | size="small" type="number" min="0" step="0.1" max="10"> |
| | | </el-input> |
| | |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column prop="proName" label="明细项目" width="260px"> |
| | | </el-table-column> --> |
| | | |
| | | <!-- <el-table-column |
| | | label="操作" |
| | | align="center" |
| | | fixed="right" |
| | | class-name="small-padding fixed-width" |
| | | width="50px" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDeletes(scope.row)" |
| | | title="删除" |
| | | ></el-button> |
| | | </template> |
| | | </el-table-column>--> |
| | | </el-table> |
| | | <h4 style="font-weight: 600;padding-left:20px">一共选中{{DataList.length}}项,合计:{{ form.xianprice }}元</h4> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <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 :title="title" :visible.sync="Seachopen" width="500px" append-to-body> |
| | | <template> |
| | | <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox> |
| | | <div style="margin: 15px 0px; width: 60px"></div> |
| | | <el-checkbox-group v-model="newproName" @change="handleCheckedCitiesChange"> |
| | | <el-checkbox style="margin: 15px 0px; width: 180px" v-for="item in allList" :label="item.proName" |
| | | :key="item.proId">{{ item.proName }}</el-checkbox> |
| | | </el-checkbox-group> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitcheckbox">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> --> |
| | | <Packages ref="aaa" @add="handleChanges" /> |
| | | </div> |
| | | </template> |
| | |
| | | xianprice: null, |
| | | counterPrice: null, |
| | | limits: 10, |
| | | keywords: [], |
| | | }, |
| | | forms: {}, |
| | | youhui: 10, |
| | | initializing: true, // 初始化标志 |
| | | initializing: true, |
| | | debounceTimer: null, |
| | | rules: { |
| | | |
| | | pacName: [{ required: true, message: "请输入套餐名称", trigger: "blur" }], |
| | | pics: [{ required: true, message: "请输入原价", trigger: "blur" }], |
| | | xianprice: [{ required: true, message: "请输入现价", trigger: "blur" }], |
| | | }, |
| | | }; |
| | | }, |
| | |
| | | this.getKeyword(); |
| | | this.getCategory(); |
| | | }, |
| | | |
| | | methods: { |
| | | debounceNumberChange(currentValue, oldValue) { |
| | | clearTimeout(this.debounceTimer); |
| | |
| | | this.numberChange(currentValue, oldValue); |
| | | }, 300); |
| | | }, |
| | | |
| | | numberChange(currentValue, oldValue) { |
| | | // 实现折扣变化的逻辑(如果需要) |
| | | }, |
| | | updateProPrice(row) { |
| | | const proPrice = new Big(row.priceOrd); |
| | | const limits = new Big(row.limits); |
| | | const proPrice = new Big(row.priceOrd || 0); |
| | | const limits = new Big(row.limits || 10); |
| | | const result = proPrice.times(limits.div(10)); |
| | | row.priceNow = result.toNumber(); |
| | | this.form.xianprice = this.DataList.reduce((sum, item) => { |
| | | return sum.plus(new Big(item.priceNow || "0")); |
| | | return sum.plus(new Big(item.priceNow || 0)); |
| | | }, new Big(0)).toNumber(); |
| | | this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; |
| | | this.youhui = this.pics ? (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10 : 10; |
| | | }, |
| | | calculateDiscount(row) { |
| | | if (row.limits > 10) { |
| | |
| | | }, |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | return data.proName.indexOf(value) !== -1 || data.proEngName.indexOf(value) !== -1; |
| | | return data.proName.indexOf(value) !== -1 || (data.proEngName && data.proEngName.indexOf(value) !== -1); |
| | | }, |
| | | getList() { |
| | | this.loading = true; |
| | | getPacTjProjectList().then((response) => { |
| | | this.allList = response.data; |
| | | this.allList = response.data || []; |
| | | this.loading = false; |
| | | }); |
| | | getPacList(this.queryParams).then((response) => { |
| | | response.rows.forEach((item, index) => { |
| | | item.newID = (this.queryParams.pageNum - 1) * this.queryParams.pageSize + index + 1; |
| | | }); |
| | | this.total = response.total; |
| | | this.packageList = response.rows; |
| | | this.total = response.total || 0; |
| | | this.packageList = response.rows || []; |
| | | this.loading = false; |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | this.$message.error("获取套餐列表失败"); |
| | | }); |
| | | }, |
| | | getKeyword() { |
| | | this.loading = true; |
| | | listKeyword(this.queryParams).then((response) => { |
| | | this.keywordList = response.rows; |
| | | this.keywordList = response.rows || []; |
| | | this.loading = false; |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | this.$message.error("获取关键字列表失败"); |
| | | }); |
| | | }, |
| | | sel(val) { |
| | | let id = val; |
| | | this.keys = id.join(","); |
| | | const maleId = '4'; // “男”的 ID |
| | | const femaleId = '5'; // “女”的 ID |
| | | let selectedIds = [...val]; // 复制当前选中的 ID 数组 |
| | | |
| | | // 实现“男”和“女”互斥逻辑 |
| | | if (selectedIds.includes(maleId) && selectedIds.includes(femaleId)) { |
| | | selectedIds = selectedIds.slice(-1); // 保留最后选中的一个 |
| | | this.$message.warning('“男”和“女”关键字互斥,只能选择一个!'); |
| | | } |
| | | |
| | | // 更新 form.keywords 和 keys |
| | | this.form.keywords = selectedIds; |
| | | this.keys = selectedIds.join(','); |
| | | |
| | | // 调用 getDataList,传递所有选中的关键字 ID(逗号分隔) |
| | | this.getDataList({ xb: this.keys }); |
| | | }, |
| | | getCategory() { |
| | | this.loading = true; |
| | | listCategory(this.queryParams).then((response) => { |
| | | this.categoryList = response.rows; |
| | | this.categoryList = response.rows || []; |
| | | this.loading = false; |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | this.$message.error('获取套餐类目失败'); |
| | | }); |
| | | }, |
| | | getDataList(params = {}) { |
| | | this.loading = true; |
| | | const query = { ...this.queryParams1, ...params }; |
| | | search(query).then((response) => { |
| | | this.Treedata = response.data.list || []; |
| | | this.total1 = response.data.total || 0; |
| | | this.pics = this.DataList.reduce((total, item) => total + (item.priceOrd || 0), 0); |
| | | this.$nextTick(() => { |
| | | this.$refs.tree.setCheckedKeys(this.checkedNodes); |
| | | this.initializing = false; |
| | | }); |
| | | this.loading = false; |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | this.$message.error('获取项目列表失败'); |
| | | }); |
| | | }, |
| | | shangpin(vals) {}, |
| | |
| | | xianprice: null, |
| | | counterPrice: null, |
| | | limits: 10, |
| | | keywords: [], |
| | | }; |
| | | this.initializing = true; |
| | | this.resetForm("form"); |
| | |
| | | this.checkedListkey = []; |
| | | this.checkedNodes = []; |
| | | this.getDataList(); |
| | | this.youhui = 10 |
| | | this.youhui = 10; |
| | | }, |
| | | handleStatusChange(row) { |
| | | let data = { |
| | |
| | | pacStatus: row.pacStatus, |
| | | }; |
| | | let text = row.pacStatus === "0" ? "启用" : "停用"; |
| | | this.$confirm("确认要" + text + row.pacName + "套餐吗?") |
| | | this.$modal |
| | | .confirm("确认要" + text + row.pacName + "套餐吗?") |
| | | .then(() => updateStatus(data)) |
| | | .then(() => { |
| | | this.msgSuccess(text + "成功"); |
| | | this.$modal.msgSuccess(text + "成功"); |
| | | }) |
| | | .catch(() => { |
| | | row.pacStatus = row.pacStatus === "0" ? "0" : "1"; |
| | |
| | | getPacInFo(row.pacId).then((response) => { |
| | | const data = response.data || {}; |
| | | Object.keys(data).forEach((key) => { |
| | | this.$set(this.form, key, response.data[key]); |
| | | this.$set(this.form, key, data[key]); |
| | | }); |
| | | this.youhui = data.limits || 10; |
| | | this.pics = data.price || 0; |
| | |
| | | this.checkedkey = this.DataList.map(item => item.proId || ''); |
| | | this.checkedListkey = [...this.checkedkey]; |
| | | this.checkedNodes = [...this.checkedkey]; |
| | | |
| | | return this.getDataList(); |
| | | |
| | | }).then(() => { |
| | | this.loading = false; |
| | | this.$nextTick(() => { |
| | |
| | | if (this.form.pacName) { |
| | | if (!this.form.tjProjectList) { |
| | | this.form.tjProjectList = []; |
| | | this.form.tjProjectList.push({ |
| | | id: parseInt(length), |
| | | proName: "", |
| | | allSonProName: "", |
| | | proPrice: "", |
| | | priceNow: "", |
| | | proId: "", |
| | | }); |
| | | } else { |
| | | this.form.tjProjectList.push({ |
| | | id: parseInt(length), |
| | | proName: "", |
| | | allSonProName: "", |
| | | proPrice: "", |
| | | priceNow: "", |
| | | proId: "", |
| | | }); |
| | | } |
| | | this.form.tjProjectList.push({ |
| | | id: this.form.tjProjectList.length + 1, |
| | | proName: "", |
| | | allSonProName: "", |
| | | proPrice: "", |
| | | priceNow: "", |
| | | proId: "", |
| | | }); |
| | | } else { |
| | | Message.warning("请先填写套餐名称"); |
| | | this.$modal.msgWarning("请先填写套餐名称"); |
| | | } |
| | | this.$forceUpdate(); |
| | | }, |
| | | Delete(index) { |
| | | if (this.form.tjProjectList.length === 0) { |
| | | this.$alert("请先选择要删除的数据", "提示", { confirmButtonText: "确定" }); |
| | | this.$modal.alert("请先选择要删除的数据", "提示", { confirmButtonText: "确定" }); |
| | | } else { |
| | | this.form.tjProjectList.splice(index, 1); |
| | | } |
| | |
| | | </span> |
| | | ); |
| | | }, |
| | | getDataList() { |
| | | this.loading = true; |
| | | search(this.queryParams1).then((response) => { |
| | | this.Treedata = response.data.list; |
| | | this.total1 = response.data.total; |
| | | this.pics = this.DataList.reduce((total, item) => total + item.priceOrd, 0); |
| | | this.$nextTick(() => { |
| | | this.$refs.tree.setCheckedKeys(this.checkedNodes); |
| | | this.initializing = false; |
| | | }); |
| | | |
| | | }); |
| | | this.loading = false; |
| | | }, |
| | | handleFilterInput() { |
| | | this.queryParams1.page = 1; |
| | | this.getDataList(); |
| | |
| | | }, |
| | | handleCurrentChecked(data, checked, indeterminate) { |
| | | if (this.initializing) { |
| | | return; // 初始化时不处理 |
| | | return; |
| | | } |
| | | if (checked) { |
| | | if (!this.DataList.some((item) => item.proId === data.proId)) { |
| | |
| | | } |
| | | this.updateTotalPrice(); |
| | | } |
| | | |
| | | }, |
| | | updateTotalPrice() { |
| | | this.form.xianprice = this.DataList.reduce((sum, item) => { |
| | | return sum.plus(new Big(item.priceNow || "0")); |
| | | return sum.plus(new Big(item.priceNow || 0)); |
| | | }, new Big(0)).toNumber(); |
| | | this.pics = this.DataList.reduce((total, item) => total + item.priceOrd, 0); |
| | | this.pics = this.DataList.reduce((total, item) => total + (item.priceOrd || 0), 0); |
| | | }, |
| | | changeXianjia() { |
| | | if (this.form.xianprice !== 0) { |
| | | if (this.form.xianprice !== 0 && this.pics) { |
| | | this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; |
| | | } |
| | | }, |
| | | /* numberChangeXianPrice(currentValue, oldValue) { |
| | | if (this.form.xianprice === this.lastXianPrice || !this.form.xianprice) return; |
| | | clearTimeout(this.debounceTimer); |
| | | this.debounceTimer = setTimeout(() => { |
| | | this.$confirm("确定修改所有子项的折扣吗?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | this.youhui = currentValue; |
| | | let totalYsprice = new Big(0); |
| | | this.DataList.forEach((item) => { |
| | | item.limits = this.youhui; |
| | | const ordPrice = new Big(item.priceOrd); |
| | | const discount = new Big(item.limits); |
| | | const result = ordPrice.times(discount.div(10)); |
| | | item.priceNow = result.toNumber(); |
| | | totalYsprice = totalYsprice.plus(new Big(item.priceNow)); |
| | | }); |
| | | if (!totalYsprice.eq(this.form.xianprice)) { |
| | | const diff = new Big(this.form.xianprice).minus(totalYsprice); |
| | | if (this.DataList.length > 0) { |
| | | const lastItem = this.DataList[this.DataList.length - 1]; |
| | | const newYsPrice = new Big(lastItem.priceNow).plus(diff).toNumber(); |
| | | this.$set(this.DataList[this.DataList.length - 1], "priceNow", newYsPrice); |
| | | } |
| | | } |
| | | this.lastXianPrice = this.form.xianprice; |
| | | }) |
| | | .catch(() => { |
| | | this.youhui = oldValue; |
| | | }); |
| | | }, 500); |
| | | }, */ |
| | | spliceData() { |
| | | for (var i = 0; i < this.DataList.length; i++) { |
| | | for (var j = i + 1; j < this.DataList.length; j++) { |
| | | for (let i = 0; i < this.DataList.length; i++) { |
| | | for (let j = i + 1; j < this.DataList.length; j++) { |
| | | if (this.DataList[i].proId === this.DataList[j].proId) { |
| | | this.DataList.splice(j, 1); |
| | | j--; |
| | |
| | | handleCurrentChecked1(data, checked, checkedNodes) { |
| | | if (!checked) { |
| | | this.DataList = this.DataList.filter((item) => item.proId !== data.proId); |
| | | this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0); |
| | | this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0); |
| | | this.pics = this.TotalPrice1; |
| | | } else { |
| | | this.DataList.push(data); |
| | | this.pics = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0); |
| | | this.pics = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0); |
| | | this.spliceData(); |
| | | this.TotalPrice1 = this.pics; |
| | | } |
| | | }, |
| | | handleDeletes(row) { |
| | | this.DataList = this.DataList.filter((item) => item.proParentId !== row.proParentId); |
| | | this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0); |
| | | this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0); |
| | | }, |
| | | submitForm() { |
| | | // 检查现价是否发生变化 |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | if (this.form.xianprice !== this.lastXianPrice) { |
| | | this.$confirm("确定修改所有子项的折扣吗?", "提示", { |
| | | this.$modal |
| | | .confirm("确定修改所有子项的折扣吗?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }).then(() => { |
| | | // 更新所有子项的折扣 |
| | | }) |
| | | .then(() => { |
| | | this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; |
| | | let totalYsprice = new Big(0); |
| | | this.DataList.forEach((item) => { |
| | | item.limits = this.youhui; |
| | | const ordPrice = new Big(item.priceOrd); |
| | | const ordPrice = new Big(item.priceOrd || 0); |
| | | const discount = new Big(item.limits); |
| | | const result = ordPrice.times(discount.div(10)); |
| | | item.priceNow = result.toNumber(); |
| | | totalYsprice = totalYsprice.plus(new Big(item.priceNow)); |
| | | }); |
| | | |
| | | if (!totalYsprice.eq(this.form.xianprice)) { |
| | | const diff = new Big(this.form.xianprice).minus(totalYsprice); |
| | | if (this.DataList.length > 0) { |
| | |
| | | this.$set(this.DataList[this.DataList.length - 1], "priceNow", newYsPrice); |
| | | } |
| | | } |
| | | |
| | | // 保存数据 |
| | | return this.saveData(); |
| | | }).catch(() => { |
| | | // 用户取消操作,恢复原来的现价 |
| | | }) |
| | | .catch(() => { |
| | | this.form.xianprice = this.lastXianPrice; |
| | | }); |
| | | } else { |
| | | // 现价没有变化,直接保存 |
| | | this.saveData(); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | // 新增一个方法处理保存逻辑 |
| | | saveData() { |
| | | this.form.limits = this.youhui; |
| | | this.form.price = this.pics; |
| | |
| | | pacRemark: this.form.pacRemark, |
| | | detail: this.form.detail, |
| | | }; |
| | | |
| | | return saveOreditTjPacNew(data).then((res) => { |
| | | this.$modal.msgSuccess("保存成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }).catch(() => { |
| | | this.$message.error("保存失败"); |
| | | }); |
| | | }, |
| | | handleDelete(row) { |
| | |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | .el-tooltip__popper { |
| | | max-width: 800px; |
| | | } |
| | | |
| | | .showInline { |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | |
| | | line-clamp: 2; |
| | | -webkit-box-orient: vertical; |
| | | } |
| | | |
| | | .pag { |
| | | width: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .pag1 { |
| | | width: 30%; |
| | | } |
| | | |
| | | .dialog-footer { |
| | | position: absolute; |
| | | left: 40%; |
| | | bottom: 2%; |
| | | } |
| | | |
| | | .tab3 { |
| | | max-height: 400px; |
| | | overflow-y: auto; |
| | | border: 1px solid #d9d9d9; |
| | | } |
| | | |
| | | /* .custom-tree-node { |
| | | flex: 1; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | font-size: 14px; |
| | | padding-right: 8px; |
| | | } */ |
| | | </style> |