From 46f46a3ea84dac4cd0e6ff8b038e2d7b9e97380e Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期一, 28 十一月 2022 16:13:13 +0800 Subject: [PATCH] 店铺管理优化 --- src/views/operate/fivepack/threepack/components/updateUser/index.vue | 497 ++++++++++++++++----------- src/views/operate/fivepack/threepack/components/score/index.vue | 86 ++++ src/api/operate/storeManagement.js | 4 src/views/operate/fivepack/threepack/components/content.vue | 480 ++++++++++++++++---------- 4 files changed, 673 insertions(+), 394 deletions(-) diff --git a/src/api/operate/storeManagement.js b/src/api/operate/storeManagement.js index 6a418e0..cbc2cc6 100644 --- a/src/api/operate/storeManagement.js +++ b/src/api/operate/storeManagement.js @@ -26,4 +26,8 @@ export function getVideoPoint(params) { return http.get('/sccg/video_point/query', params); +} + +export function getStoreScore(id) { + return http.get('/sccg/store/storeinfo/' + id + '/storeScore') } \ No newline at end of file diff --git a/src/views/operate/fivepack/threepack/components/content.vue b/src/views/operate/fivepack/threepack/components/content.vue index c2d6a7b..7275754 100644 --- a/src/views/operate/fivepack/threepack/components/content.vue +++ b/src/views/operate/fivepack/threepack/components/content.vue @@ -1,122 +1,222 @@ <template> - <div class="content"> - <header> - <div class="headerContent"> - <div class="find"> - <div class="search-item"> - <span>杈撳叆鏌ヨ:</span> - <el-input style="flex: 1" :placeholder="isStorePage() ? '搴楅摵锛堥棬搴楋級鍚嶇О' : '璇疯緭鍏ュ簵閾虹紪鍙�'" v-model="storeCode" /> - </div> - <div class="search-item"> - <span>搴楅摵鐘舵��:</span> - <el-select v-model="storeStatus" placeholder="閫夋嫨搴楅摵鐘舵��"> - <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> - </el-select> - </div> - <div class="findBtn"> - <el-button type="primary" @click="search" icon="el-icon-search">鏌ヨ</el-button> - <el-button icon="el-icon-delete-solid" @click="handleReset">閲嶇疆</el-button> - </div> + <div class="content"> + <header> + <div class="headerContent"> + <div class="find"> + <div class="search-item"> + <span>杈撳叆鏌ヨ:</span> + <el-input + style="flex: 1" + :placeholder=" + isStorePage() ? '搴楅摵锛堥棬搴楋級鍚嶇О' : '璇疯緭鍏ュ簵閾虹紪鍙�' + " + v-model="storeCode" + /> </div> - <el-button v-if="isStorePage()" type="primary" icon="el-icon-plus" @click="handleView(null, 'create')">娣诲姞</el-button> + <div class="search-item"> + <span>搴楅摵鐘舵��:</span> + <el-select v-model="storeStatus" placeholder="閫夋嫨搴楅摵鐘舵��"> + <el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </div> + <div class="findBtn"> + <el-button type="primary" @click="search" icon="el-icon-search" + >鏌ヨ</el-button + > + <el-button icon="el-icon-delete-solid" @click="handleReset" + >閲嶇疆</el-button + > + </div> </div> - </header> - <main> - <!-- 鏁版嵁灞曠ず --> - <el-table ref="multipleTable" - :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}" - :data="tableData" style="width: 100%" :row-class-name="tableRowClassName"> - <el-table-column type="selection" min-width="5"> - </el-table-column> - <el-table-column prop="storeNumber" label="搴楅摵缂栧彿" min-width="10"> - </el-table-column> - <el-table-column prop="storeName" label="搴楅摵鍚嶇О" min-width="10"> - </el-table-column> - <el-table-column prop="owner" label="搴楅摵鑱旂郴浜�" min-width="10"> - </el-table-column> - <el-table-column prop="contact" label="搴楅摵鑱旂郴鐢佃瘽" min-width="10"> - </el-table-column> - <el-table-column prop="storeAddress" label="搴楅摵璇︾粏鍦板潃" min-width="10"> - </el-table-column> - <el-table-column prop="videoPoint" label="鍏宠仈鎽勫儚鏈�" min-width="10"> - <template v-if="scope.row.videoId" slot-scope="scope"> - <span>{{ scope.row.videoPoint.name }}</span> - </template> - </el-table-column> - <el-table-column prop="operation" label="鎿嶄綔" min-width="20"> - <template slot-scope="scope"> - <div v-if="!isStorePage()" class="operation"> - <el-link icon="el-icon-edit" :underline="false" @click="handleView(scope.row, 'update')">缂栬緫</el-link> - <el-link class="leftPx" icon="el-icon-delete-solid" :underline="false" @click="handleDelete(scope.row.id)">鍒犻櫎</el-link> - <el-link class="leftPx" icon="el-icon-edit" :underline="false">鎺ㄩ�佷俊鎭�</el-link> - <el-link class="leftPx" icon="el-icon-edit" :underline="false" @click="handleView(scope.row, 'view')">鏌ョ湅</el-link> - </div> - <div v-else class="operation"> - <el-link icon="el-icon-edit" :underline="false" @click="handleView(scope.row, 'update')">缂栬緫</el-link> - <el-link class="leftPx" icon="el-icon-delete-solid" :underline="false" - @click="handleDelete(scope.row.id)">鍒犻櫎</el-link> - </div> - </template> - </el-table-column> - </el-table> - <!-- 鏌ョ湅淇敼椤甸潰 --> - <el-dialog :visible.sync="dialogUpdate" width="45%" - :destroy-on-close="true" - :title="dialogType === 'view' ? '鏌ョ湅搴楅摵淇℃伅' : '淇敼搴楅摵淇℃伅'" :before-close="handleClose"> - <updateUser v-if="dialogUpdate" :dialogType="dialogType" :storeInfo="storeInfo" :isStorePage="isStorePage()" @closeDialog="closeDialog" /> - </el-dialog> - <!-- 鍒嗛〉 --> - <div class="pagination"> - <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum" - :page-size="pageSize" @current-change="changeCurrentPage"> - </el-pagination> - </div> - </main> - </div> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + background: '#06122c', + 'font-size': '12px', + color: '#4b9bb7', + 'font-weight': '650', + 'line-height': '45px', + }" + :data="tableData" + style="width: 100%" + :row-class-name="tableRowClassName" + > + <el-table-column type="selection" min-width="5"> </el-table-column> + <el-table-column prop="storeNumber" label="搴楅摵缂栧彿" min-width="10"> + </el-table-column> + <el-table-column prop="storeName" label="搴楅摵鍚嶇О" min-width="10"> + </el-table-column> + <el-table-column prop="owner" label="搴楅摵鑱旂郴浜�" min-width="10"> + </el-table-column> + <el-table-column prop="contact" label="搴楅摵鑱旂郴鐢佃瘽" min-width="10"> + </el-table-column> + <el-table-column + prop="storeAddress" + label="搴楅摵璇︾粏鍦板潃" + min-width="10" + > + </el-table-column> + <el-table-column prop="storeScore" label="搴楅摵绉垎" min-width="10"> + </el-table-column> + <el-table-column prop="videoPoint" label="鍏宠仈鎽勫儚鏈�" min-width="10"> + <template v-if="scope.row.videoId" slot-scope="scope"> + <span>{{ scope.row.videoPoint.name }}</span> + </template> + </el-table-column> + <el-table-column prop="operation" label="鎿嶄綔" min-width="20"> + <template slot-scope="scope"> + <div v-if="!isStorePage()" class="operation"> + <el-link + icon="el-icon-edit" + :underline="false" + @click="handleView(scope.row, 'update')" + >缂栬緫</el-link + > + <el-link + class="leftPx" + icon="el-icon-delete-solid" + :underline="false" + @click="handleDelete(scope.row.id)" + >鍒犻櫎</el-link + > + <el-link class="leftPx" icon="el-icon-edit" :underline="false" + >鎺ㄩ�佷俊鎭�</el-link + > + <el-link + class="leftPx" + icon="el-icon-edit" + :underline="false" + @click="handleScoreView(scope.row, 'view')" + >鏌ョ湅</el-link + > + </div> + <div v-else class="operation"> + <el-link + icon="el-icon-edit" + :underline="false" + @click="handleView(scope.row, 'update')" + >缂栬緫</el-link + > + <el-link + class="leftPx" + icon="el-icon-delete-solid" + :underline="false" + @click="handleDelete(scope.row.id)" + >鍒犻櫎</el-link + > + </div> + </template> + </el-table-column> + </el-table> + <!-- 鏌ョ湅淇敼椤甸潰 --> + <el-dialog + :visible.sync="dialogUpdate" + width="45%" + :destroy-on-close="true" + :title="dialogType === 'view' ? '鏌ョ湅搴楅摵淇℃伅' : '淇敼搴楅摵淇℃伅'" + :before-close="handleClose" + > + <updateUser + v-if="dialogUpdate" + :dialogType="dialogType" + :storeInfo="storeInfo" + :isStorePage="isStorePage()" + @closeDialog="closeDialog" + /> + </el-dialog> + <!-- 鏌ョ湅淇敼椤甸潰 --> + <el-dialog + :visible.sync="dialogScore" + width="45%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleClose" + > + <scoreView :storeInfo="storeInfo" @closeDialog="closeDialog" /> + </el-dialog> + <!-- 鍒嗛〉 --> + <div class="pagination"> + <el-pagination + background + :current-page="currentPage" + layout="prev, pager, next" + :total="totalNum" + :page-size="pageSize" + @current-change="changeCurrentPage" + > + </el-pagination> + </div> + </main> + </div> </template> <script> import updateUser from "@/views/operate/fivepack/threepack/components/updateUser"; -import { getStoreInfoList, deleteStoreInfo } from "@/api/operate/storeManagement"; +import scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; export default { - components: { updateUser }, + components: { updateUser, scoreView }, created() { this.search(); }, - props: ['model'], + props: ["model"], data() { return { storeCode: null, storeStatus: null, - options: [{ label: '鍏ㄩ儴', value: 0 }, { label: '缁忚惀', value: 1 }, { label: '鍊掗棴', value: 2 }], + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], tableData: [], dialogUpdate: false, + dialogScore: false, currentPage: 1, totalNum: 0, pageSize: 10, userInfo: null, - dialogType: '', - storeInfo: null - } + dialogType: "", + storeInfo: null, + }; }, methods: { search() { const status = this.storeStatus === 0 ? null : this.storeStatus; getStoreInfoList({ keyword: this.storeCode, status }) - .then(({ list, pageSize, totalPage }) => { - this.tableData = list; - this.pageSize = pageSize; - this.totalNum = totalPage; - }) - .catch(err => this.$message({ type: 'error', message: err })); + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); }, handleReset() { - this.storeCode = ''; + this.storeCode = ""; this.storeStatus = null; this.search(); }, @@ -126,22 +226,28 @@ this.storeInfo = row; this.dialogType = type; }, + handleScoreView(row) { + this.dialogScore = true; + this.storeInfo = row; + }, handleDelete(id) { deleteStoreInfo(id) - .then(() => { - this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); - this.search(); - }) - .catch(err => this.$message({ type: 'error', message: err })); + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); }, handleClose() { this.dialogUpdate = false; + this.dialogScore = false; }, closeDialog() { this.dialogUpdate = false; + this.dialogScore = false; this.search(); }, @@ -159,103 +265,103 @@ }, isStorePage() { - return this.model === 'store'; + return this.model === "store"; + }, + }, +}; +</script> +<style lang="scss" scoped> +.content { + flex: 1; + height: 100%; + padding-left: 20px; + + .headerContent { + display: flex; + line-height: 100px; + justify-content: space-between; + align-items: center; + + .find { + display: flex; + } + + .search-item { + display: flex; + padding: 10px; + } + + .findBtn { + line-height: 100px; + margin-left: 15px; + display: flex; + align-items: center; + + .el-button { + padding: 12px 25px; + } + } + + .addBtn { + padding: 12px 30px; + margin-left: 20%; + } + } + + main { + background-color: #09152f; + margin-top: 20px; + padding-bottom: 50px; + + .mainTitle { + line-height: 60px; + } + + .el-link { + color: #4b9bb7; + } + + .leftPx { + margin-left: 10px; + } + + .pagination { + margin-top: 50px; + display: flex; + line-height: 50px; + justify-content: center; + + .el-pagination { + &::v-deep li, + &::v-deep .btn-prev, + &::v-deep .btn-next { + background-color: #071f39; + color: #4b9bb7; + } + } + } + + .el-table { + color: #4b9bb7; + font-size: 10px; + + &::v-deep .el-table__empty-block { + background-color: #09152f; + color: #4b9bb7; + } + + .operation { + display: flex; + + .el-button { + border: none; + } + + span:hover { + cursor: pointer; + } + } } } } -</script> -<style lang="scss" scoped> -.content{ - flex: 1; - height: 100%; - padding-left: 20px; - - .headerContent { - display: flex; - line-height: 100px; - justify-content: space-between; - align-items: center; - - .find { - display: flex; - } - - .search-item { - display: flex; - padding: 10px; - } - - .findBtn { - line-height: 100px; - margin-left: 15px; - display: flex; - align-items: center; - - .el-button { - padding: 12px 25px; - } - } - - .addBtn { - padding: 12px 30px; - margin-left: 20%; - } - } - - main { - background-color: #09152f; - margin-top: 20px; - padding-bottom: 50px; - - .mainTitle { - line-height: 60px; - } - - .el-link { - color: #4b9bb7; - } - - .leftPx { - margin-left: 10px; - } - - .pagination { - margin-top: 50px; - display: flex; - line-height: 50px; - justify-content: center; - - .el-pagination { - &::v-deep li, - &::v-deep .btn-prev, - &::v-deep .btn-next { - background-color: #071f39; - color: #4b9bb7; - } - } - } - - .el-table { - color: #4b9bb7; - font-size: 10px; - - &::v-deep .el-table__empty-block { - background-color: #09152f; - color: #4b9bb7; - } - - .operation { - display: flex; - - .el-button { - border: none; - } - - span:hover { - cursor: pointer; - } - } - } - } - } </style> \ No newline at end of file diff --git a/src/views/operate/fivepack/threepack/components/score/index.vue b/src/views/operate/fivepack/threepack/components/score/index.vue new file mode 100644 index 0000000..bdaf7e5 --- /dev/null +++ b/src/views/operate/fivepack/threepack/components/score/index.vue @@ -0,0 +1,86 @@ +<template> + <div class="content"> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + background: '#06122c', + 'font-size': '12px', + color: '#4b9bb7', + 'font-weight': '650', + 'line-height': '45px', + }" + :data="tableData" + style="width: 100%" + :row-class-name="tableRowClassName" + > + <el-table-column type="selection" min-width="5"> </el-table-column> + <el-table-column prop="category" label="瑙勫垯绫诲埆" min-width="100"> + </el-table-column> + <el-table-column prop="deductionItem" label="鎵e垎椤�" min-width="200"> + </el-table-column> + <el-table-column prop="markScore" label="鎵i櫎鍒嗘暟" min-width="60"> + </el-table-column> + <el-table-column prop="createTime" label="鎵e垎鏃堕棿" min-width="180"> + </el-table-column> + </el-table> + + <!-- 鍒嗛〉 --> + <div class="pagination"> + <el-pagination + background + :current-page="currentPage" + layout="prev, pager, next" + :total="totalNum" + :page-size="pageSize" + @current-change="changeCurrentPage" + > + </el-pagination> + </div> + </div> +</template> +<script> +import { getStoreScore } from "@/api/operate/storeManagement"; + +export default { + created() { + this.search(); + }, + + props: ["storeInfo"], + + data() { + return { + tableData: [], + currentPage: 1, + totalNum: 0, + pageSize: 10, + }; + }, + + methods: { + search() { + getStoreScore(this.storeInfo.id) + .then((res) => { + this.tableData = res.records; + this.pageSize = res.size; + this.totalNum = res.total; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + }, +}; +</script> \ No newline at end of file diff --git a/src/views/operate/fivepack/threepack/components/updateUser/index.vue b/src/views/operate/fivepack/threepack/components/updateUser/index.vue index 97d4bb2..cc23488 100644 --- a/src/views/operate/fivepack/threepack/components/updateUser/index.vue +++ b/src/views/operate/fivepack/threepack/components/updateUser/index.vue @@ -1,245 +1,328 @@ <template> - <div class="updateUser"> - <main> - <div class="mainContent"> - <el-form ref="store" label-width="140px" autoComplete="on" :model="store" :rules="rules" - label-position="right"> - <!-- 搴楅摵绫诲瀷 --> - <el-form-item v-if="isStorePage" class="optionItem" label="搴楅摵绫诲瀷:" prop="type"> - <el-cascader :options="shopTypeList" v-model="store.type" /> - </el-form-item> - <!-- 搴楅摵缂栧彿 --> - <el-form-item class="optionItem" label="搴楅摵缂栧彿:" prop="storeNumber"> - <el-input v-model="store.storeNumber" placeholder="璇峰~鍐欏簵閾虹紪鍙�" :disabled="isView()"></el-input> - </el-form-item> - <!-- 搴楅摵鍚嶇О --> - <el-form-item class="optionItem" label="搴楅摵鍚嶇О:" prop="storeName"> - <el-input v-model="store.storeName" placeholder="璇峰~鍐欏簵鍚嶇О" :disabled="isView()"></el-input> - </el-form-item> - <!-- 搴楅摵鑱旂郴浜� --> - <el-form-item class="optionItem" label="搴楅摵鑱旂郴浜�:" prop="owner"> - <el-input v-model="store.owner" placeholder="璇峰~鍐欏簵閾鸿仈绯讳汉" :disabled="isView()"></el-input> - </el-form-item> - <!-- 搴楅摵鑱旂郴鐢佃瘽 --> - <el-form-item class="optionItem" label="搴楅摵鑱旂郴鐢佃瘽:" prop="contact"> - <el-input v-model="store.contact" placeholder="璇峰~鍐欏簵閾鸿仈绯荤數璇�" :disabled="isView()"></el-input> - </el-form-item> - <!-- 搴楅摵璇︾粏鍦板潃 --> - <el-form-item class="optionItem" label="搴楅摵璇︾粏鍦板潃:" prop="storeAddress"> - <el-input v-model="store.storeAddress" placeholder="璇峰~鍐欏簵閾鸿缁嗗湴鍧�" :disabled="isView()"></el-input> - </el-form-item> - <!-- 鍏宠仈鎽勫儚鏈� --> - <el-form-item v-if="isStorePage" class="optionItem" label="鍏宠仈鎽勫儚鏈�:" prop="relationVideo"> - <el-select v-model="store.relationVideo" placeholder="璇峰~鍐欏叧鑱旀憚鍍忔満" :disabled="isView()"> - <el-option v-for="item in relationVideoList" :key="item.id" :value="item.id" :label="item.name"></el-option> - </el-select> - </el-form-item> - <el-form-item v-if="!isStorePage" class="optionItem" label="搴楅摵寰楀垎:"> - <el-input v-model="store.storeScore" :disabled="isView()"></el-input> - </el-form-item> - <el-form-item v-if="!isView()"> - <div class="optionBtn"> - <el-button type="primary" class="btn submit" @click.native.prevent="onSubmit">鎻愪氦</el-button> - </div> - </el-form-item> - </el-form> + <div class="updateUser"> + <main> + <div class="mainContent"> + <el-form + ref="store" + label-width="140px" + autoComplete="on" + :model="store" + :rules="rules" + label-position="right" + > + <!-- 搴楅摵绫诲瀷 --> + <el-form-item + v-if="isStorePage" + class="optionItem" + label="搴楅摵绫诲瀷:" + prop="type" + > + <el-cascader :options="shopTypeList" v-model="store.type" /> + </el-form-item> + <!-- 搴楅摵缂栧彿 --> + <el-form-item v-if="store.id" class="optionItem" label="搴楅摵缂栧彿:"> + <el-input + v-model="store.storeNumber" + placeholder="璇峰~鍐欏簵閾虹紪鍙�" + disabled + ></el-input> + </el-form-item> + <!-- 搴楅摵鍚嶇О --> + <el-form-item class="optionItem" label="搴楅摵鍚嶇О:" prop="storeName"> + <el-input + v-model="store.storeName" + placeholder="璇峰~鍐欏簵鍚嶇О" + :disabled="isView()" + ></el-input> + </el-form-item> + <!-- 搴楅摵鑱旂郴浜� --> + <el-form-item class="optionItem" label="搴楅摵鑱旂郴浜�:" prop="owner"> + <el-input + v-model="store.owner" + placeholder="璇峰~鍐欏簵閾鸿仈绯讳汉" + :disabled="isView()" + ></el-input> + </el-form-item> + <!-- 搴楅摵鑱旂郴鐢佃瘽 --> + <el-form-item class="optionItem" label="搴楅摵鑱旂郴鐢佃瘽:" prop="contact"> + <el-input + v-model="store.contact" + placeholder="璇峰~鍐欏簵閾鸿仈绯荤數璇�" + :disabled="isView()" + ></el-input> + </el-form-item> + <!-- 搴楅摵璇︾粏鍦板潃 --> + <el-form-item + class="optionItem" + label="搴楅摵璇︾粏鍦板潃:" + prop="storeAddress" + > + <el-input + v-model="store.storeAddress" + placeholder="璇峰~鍐欏簵閾鸿缁嗗湴鍧�" + :disabled="isView()" + ></el-input> + </el-form-item> + <!-- 鍏宠仈鎽勫儚鏈� --> + <el-form-item + v-if="isStorePage" + class="optionItem" + label="鍏宠仈鎽勫儚鏈�:" + > + <el-select + v-model="store.relationVideo" + placeholder="璇峰~鍐欏叧鑱旀憚鍍忔満" + :disabled="isView()" + > + <el-option + v-for="item in relationVideoList" + :key="item.id" + :value="item.id" + :label="item.name" + ></el-option> + </el-select> + </el-form-item> + <el-form-item + v-if="!isStorePage" + class="optionItem" + label="搴楅摵寰楀垎:" + > + <el-input + v-model="store.storeScore" + :disabled="isView()" + ></el-input> + </el-form-item> + <el-form-item v-if="!isView()"> + <div class="optionBtn"> + <el-button + type="primary" + class="btn submit" + @click.native.prevent="onSubmit" + >鎻愪氦</el-button + > </div> - </main> - </div> + </el-form-item> + </el-form> + </div> + </main> + </div> </template> <script> import { deepClone, getCodeList } from "@/utils/helper"; -import { addStoreInfo, getVideoPoint, updateStoreInfo } from "@/api/operate/storeManagement"; +import { + addStoreInfo, + getVideoPoint, + updateStoreInfo, +} from "@/api/operate/storeManagement"; export default { - data() { - const validatePhone = (rule, value, callback) => { - if (!value) { - callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�")); - } else { - const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/ - if (!rep.test(value)) { - callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜"); - } else { - callback(); - } - } - }; + data() { + const validatePhone = (rule, value, callback) => { + if (!value) { + callback(new Error("璇峰~鍐欐墜鏈哄彿鐮�")); + } else { + const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/; + if (!rep.test(value)) { + callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜"); + } else { + callback(); + } + } + }; - const validateStoreType = (rule, value, callback) => { - if (value) { - callback(); + const validateStoreType = (rule, value, callback) => { + if (value) { + callback(); + } else { + callback(new Error("璇烽�夋嫨搴楅摵绫诲瀷")); + } + }; + return { + store: { + storeNumber: "", + storeName: "", + owner: "", + contact: "", + storeAddress: "", + relationVideo: "", + type: null, + storeScore: null, + }, + rules: { + type: [{ required: true, validator: validateStoreType }], + storeNumber: [ + { required: true, trigger: "blur", message: "璇疯緭鍏ュ簵閾虹紪鍙�" }, + ], + storeName: [ + { required: true, trigger: "blur", message: "璇疯緭鍏ュ簵閾哄悕绉�" }, + ], + owner: [ + { required: true, trigger: "blur", message: "璇疯緭鍏ュ簵閾鸿仈绯讳汉" }, + ], + contact: [ + { required: true, trigger: "blur", validator: validatePhone }, + ], + storeAddress: [ + { required: true, trigger: "blur", message: "璇疯緭鍏ュ簵閾鸿缁嗗湴鍧�" }, + ], + relationVideo: [ + { required: true, trigger: "blur", message: "璇疯緭鍏ュ叧鑱旀憚鍍忔満" }, + ], + }, + shopTypeList: [], + relationVideoList: [], + }; + }, + async created() { + const result = await getVideoPoint({ current: 1, size: 1000 }); + this.relationVideoList = result.records; + + if (this.storeInfo) { + this.$set(this, "store", this.storeInfo); + if (this.storeInfo && this.isStorePage) { + this.store.relationVideo = this.store.videoPoint.name; + } + } + + if (!this.isView()) { + await this.getShopTypeList(); + } + }, + + methods: { + onSubmit() { + this.$refs.store.validate((valid) => { + if (valid) { + debugger + this.store.type = this.store.type[1]; + if (this.isCreated()) { + addStoreInfo(this.store) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.$emit("closeDialog"); + }) + .catch((err) => this.$message({ type: "error", message: err })); } else { - callback(new Error('璇烽�夋嫨搴楅摵绫诲瀷')); + updateStoreInfo(this.store) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.$emit("closeDialog"); + }) + .catch((err) => this.$message({ type: "error", message: err })); } - }; - return { - store: { - storeNumber: '', - storeName: '', - owner: '', - contact: '', - storeAddress: '', - relationVideo: '', - type: null, - storeScore: null - }, - rules: { - type: [{ required: true, validator: validateStoreType }], - storeNumber: [{ required: true, trigger:'blur', message: '璇疯緭鍏ュ簵閾虹紪鍙�' }], - storeName: [{ required: true, trigger:'blur', message: '璇疯緭鍏ュ簵閾哄悕绉�' }], - owner: [{ required: true, trigger:'blur', message: '璇疯緭鍏ュ簵閾鸿仈绯讳汉' }], - contact: [{ required: true, trigger:'blur', validator: validatePhone }], - storeAddress: [{ required: true, trigger:'blur', message: '璇疯緭鍏ュ簵閾鸿缁嗗湴鍧�' }], - relationVideo: [{ required: true, trigger:'blur', message: '璇疯緭鍏ュ叧鑱旀憚鍍忔満' }] - }, - shopTypeList: [], - relationVideoList: [] + } else { + this.$message({ type: "warning", message: "璇锋鏌ュ繀濉」" }); } + }); }, - async created() { - if (this.storeInfo) { - this.$set(this, 'store', this.storeInfo); - const result = await getVideoPoint({ current: 1, size: 1 }); - this.relationVideoList = result.records; - if (this.storeInfo && this.isStorePage) { - this.store.relationVideo = this.store.videoPoint.name; - } - if (!this.isView()) { - await this.getShopTypeList(); - } + + isView() { + return this.dialogType === "view"; + }, + + isCreated() { + return this.dialogType === "create"; + }, + + // 鑾峰彇瀛楀吀 + async getShopTypeList() { + let arr = await getCodeList("16"); + this.shopTypeList = this.createShopTypeTree(arr); + + if (this.dialogType === "update") { + const selectedStoreType = arr.find( + (item) => item.name === this.store.typeName + ); + this.$set(this.store, "type", [ + selectedStoreType.parentId, + selectedStoreType.id, + ]); } }, - methods: { - onSubmit() { - this.$refs.store.validate(valid => { - if (valid) { - this.store.type = this.store.type[1]; - if (this.isCreated()) { - addStoreInfo(this.store) - .then(() => { - this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); - this.$emit('closeDialog'); - }) - .catch(err => this.$message({ type: 'error', message: err })); - } else { - updateStoreInfo(this.store) - .then(() => { - this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); - this.$emit('closeDialog'); - }) - .catch(err => this.$message({ type: 'error', message: err })); - } - } else { - this.$message({ type: 'warning', message: '璇锋鏌ュ繀濉」' }); - } + // 鍒涘缓鍟嗛摵绫诲瀷鏍� + createShopTypeTree(arr) { + if (arr.length && arr.length !== 0) { + // 鑾峰彇椤剁骇鑿滃崟 + let treeRoot = arr.filter((item) => { + return item.parentId === 0; }); - }, - - isView() { - return this.dialogType === 'view'; - }, - - isCreated() { - return this.dialogType === 'create'; - }, - - // 鑾峰彇瀛楀吀 - async getShopTypeList() { - let arr = await getCodeList('16'); - this.shopTypeList = this.createShopTypeTree(arr); - if (this.dialogType === 'update') { - const selectedStoreType = arr.find(item => item.name === this.store.typeName); - this.$set(this.store, 'type', [selectedStoreType.parentId, selectedStoreType.id]); - } - }, - - // 鍒涘缓鍟嗛摵绫诲瀷鏍� - createShopTypeTree(arr) { - if (arr.length && arr.length !== 0) { - // 鑾峰彇椤剁骇鑿滃崟 - let treeRoot = arr.filter(item => { - return item.parentId === 0 - }) - // 娣诲姞child - treeRoot.forEach(item => { - item.children = [] - arr.forEach(child => { - child.value = child.id; - child.label = child.name; - if (child.parentId === item.id) { - item.children.push(child) - } - }) - }) - return treeRoot; - } + // 娣诲姞child + treeRoot.forEach((item) => { + item.children = []; + arr.forEach((child) => { + child.value = child.id; + child.label = child.name; + if (child.parentId === item.id) { + item.children.push(child); + } + }); + }); + return treeRoot; } }, + }, beforeDestroy() { - this.store = null; + this.store = null; }, - props: ['storeInfo', 'dialogType', 'isStorePage'] -} + props: ["storeInfo", "dialogType", "isStorePage"], +}; </script> <style lang="scss" scoped> .updateUser { - border-radius: 1px; + border-radius: 1px; + background-color: #09152f; + + main { + text-align: left; + padding: 0 55px; background-color: #09152f; - main { - text-align: left; - padding: 0 55px; - background-color: #09152f; + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; - .mainContent { - display: flex; - justify-content: center; - padding-top: 50px; + .el-form-item__content { + width: 400px; - .el-form-item__content { - width: 400px; - - .el-select { - width: 100%; - } - } - - .optionHandleSp { - display: flex; - - .areaNumber, - .moreNumber { - flex: 1; - } - - .telNumber { - flex: 2; - } - } - - .optionBtn { - display: flex; - margin-top: 20px; - - .btn { - padding: 12px 50px; - } - } - + .el-select { + width: 100%; } + } + + .optionHandleSp { + display: flex; + + .areaNumber, + .moreNumber { + flex: 1; + } + + .telNumber { + flex: 2; + } + } + + .optionBtn { + display: flex; + margin-top: 20px; + + .btn { + padding: 12px 50px; + } + } } + } } .updateUser::v-deep .el-form-item__label { - color: #4b9bb7; + color: #4b9bb7; } .updateUser::v-deep .el-input__inner { - background-color: #09152f; - border: 1px solid #17324c; + background-color: #09152f; + border: 1px solid #17324c; } - </style> \ No newline at end of file -- Gitblit v1.8.0