From cc512dff1a5d7e45a2c2b628fcd45019ed3b5c0e Mon Sep 17 00:00:00 2001 From: wl <173@qq.com> Date: 星期五, 06 一月 2023 15:24:23 +0800 Subject: [PATCH] fix: 修复发送消息按钮不能点击 --- .history/src/views/operate/fivepack/threepack/components/content_20230106141140.vue | 390 + .history/src/views/operate/fivepack/threepack/components/content_20230106141721.vue | 396 + .history/src/views/operate/fivepack/threepack/components/content_20230106145954.vue | 611 + .history/src/views/operate/fivepack/threepack/components/content_20230106150301.vue | 612 + .history/src/views/operate/fivepack/threepack/components/content_20230106141438.vue | 390 + .history/src/views/operate/fivepack/threepack/components/content_20230106150721.vue | 614 + .history/src/views/operate/fivepack/threepack/components/content_20230106143827.vue | 482 + .history/src/views/operate/fivepack/threepack/components/content_20230106151314.vue | 619 + .history/src/views/operate/fivepack/threepack/components/content_20230106141353.vue | 390 + .history/src/views/operate/fivepack/threepack/components/content_20230106143336.vue | 441 + .history/src/views/operate/fivepack/threepack/components/content_20230106151348.vue | 619 + .history/src/views/operate/fivepack/threepack/components/content_20230106143020.vue | 441 + src/views/operate/fivepack/threepack/components/content.vue | 389 .history/src/views/operate/message/myIndex/update/index_20230104153319.vue | 522 + .history/src/views/operate/fivepack/threepack/components/content_20230106144748.vue | 591 + .history/src/views/operate/fivepack/threepack/index_20230106141041.vue | 149 .history/src/views/operate/fivepack/threepack/components/content_20230106150230.vue | 612 + src/api/operate/messageManagement.js | 4 .history/src/views/operate/fivepack/threepack/components/content_20230106144154.vue | 498 + .history/src/views/operate/fivepack/threepack/components/content_20230106150302.vue | 612 + .history/src/views/operate/fivepack/threepack/index_20221228101401.vue | 149 .history/src/api/operate/messageManagement_20230106145058.js | 29 src/views/operate/message/myIndex/update/index.vue | 1 .history/src/views/operate/fivepack/threepack/components/content_20230106150611.vue | 617 + .history/src/views/operate/fivepack/threepack/components/content_20230106144438.vue | 586 + .history/src/views/operate/fivepack/threepack/components/content_20230106141756.vue | 396 + .history/src/views/operate/fivepack/threepack/components/content_20230106141036.vue | 386 + .history/src/views/operate/fivepack/threepack/components/content_20230106142819.vue | 440 + .history/src/views/operate/fivepack/threepack/components/content_20230106150040.vue | 611 + .history/src/views/operate/fivepack/threepack/components/content_20230106150656.vue | 614 + .history/src/views/operate/fivepack/threepack/components/content_20230106142532.vue | 440 + .history/src/views/operate/fivepack/threepack/components/content_20230106151736.vue | 543 + .history/src/views/operate/fivepack/threepack/components/content_20230106144413.vue | 586 + .history/src/views/operate/fivepack/threepack/components/content_20230106150605.vue | 617 + .history/src/views/operate/fivepack/threepack/components/content_20230106141143.vue | 390 + .history/src/views/operate/fivepack/threepack/components/content_20230106141245.vue | 390 + .history/src/views/operate/fivepack/threepack/components/content_20230106151642.vue | 621 + .history/src/views/operate/fivepack/threepack/components/content_20230106144253.vue | 499 + .history/src/views/operate/fivepack/threepack/components/content_20230106141846.vue | 396 + .history/src/views/operate/fivepack/threepack/components/content_20230106141224.vue | 390 + .history/src/views/operate/fivepack/threepack/components/content_20230106150356.vue | 611 + .history/src/views/operate/fivepack/threepack/components/content_20230106143520.vue | 441 + .history/src/views/operate/fivepack/threepack/components/content_20230106141321.vue | 390 + .history/src/views/operate/fivepack/threepack/components/content_20230106145110.vue | 610 + .history/src/views/operate/fivepack/threepack/components/content_20230106144109.vue | 490 + .history/src/views/operate/fivepack/threepack/components/content_20230106151211.vue | 618 + .history/src/views/operate/fivepack/threepack/components/content_20230106151542.vue | 620 + .history/src/api/operate/messageManagement_20230106150755.js | 29 48 files changed, 21,782 insertions(+), 110 deletions(-) diff --git a/.history/src/api/operate/messageManagement_20230106145058.js b/.history/src/api/operate/messageManagement_20230106145058.js new file mode 100644 index 0000000..a7cf1ff --- /dev/null +++ b/.history/src/api/operate/messageManagement_20230106145058.js @@ -0,0 +1,29 @@ +import http from "@/http"; + +export function deleteMessage(params) { + return http.delete('/sccg/message/delete', params); +} + +export function getMessageById(id) { + return http.get('/sccg/message/getMessage/' + id); +} + +export function getMessageList(params) { + return http.get('/sccg/message/list', params); +} + +export function sendMessage(params) { + return http.post('/sccg/message/sendMessage', params); +} + +export function sendMessageByMobileNumber(params) { + return http.post('/sccg/send_message_phone', params); +} + +export function saveMessage(params) { + return http.post('/sccg/message/saveMessage', params); +} + +export function updateMessage(params) { + return http.post('/sccg/message/update', params); +} \ No newline at end of file diff --git a/.history/src/api/operate/messageManagement_20230106150755.js b/.history/src/api/operate/messageManagement_20230106150755.js new file mode 100644 index 0000000..24f2a77 --- /dev/null +++ b/.history/src/api/operate/messageManagement_20230106150755.js @@ -0,0 +1,29 @@ +import http from "@/http"; + +export function deleteMessage(params) { + return http.delete('/sccg/message/delete', params); +} + +export function getMessageById(id) { + return http.get('/sccg/message/getMessage/' + id); +} + +export function getMessageList(params) { + return http.get('/sccg/message/list', params); +} + +export function sendMessage(params) { + return http.post('/sccg/message/sendMessage', params); +} + +export function sendMessageByMobileNumber(params) { + return http.post('/sccg/message/send_message_phone', params); +} + +export function saveMessage(params) { + return http.post('/sccg/message/saveMessage', params); +} + +export function updateMessage(params) { + return http.post('/sccg/message/update', params); +} \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141036.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141036.vue new file mode 100644 index 0000000..7ac6d8d --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141036.vue @@ -0,0 +1,386 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141140.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141140.vue new file mode 100644 index 0000000..4b8b28c --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141140.vue @@ -0,0 +1,390 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "./createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + sendMessage(val){ + this.isShowDialog=ture; + } + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141143.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141143.vue new file mode 100644 index 0000000..e3ec0ef --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141143.vue @@ -0,0 +1,390 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "./createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + sendMessage(val){ + this.isShowDialog=ture; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141224.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141224.vue new file mode 100644 index 0000000..e3ec0ef --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141224.vue @@ -0,0 +1,390 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "./createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + sendMessage(val){ + this.isShowDialog=ture; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141245.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141245.vue new file mode 100644 index 0000000..469a94c --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141245.vue @@ -0,0 +1,390 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "/createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + sendMessage(val){ + this.isShowDialog=ture; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141321.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141321.vue new file mode 100644 index 0000000..c27dc3c --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141321.vue @@ -0,0 +1,390 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "src\views\operate\fivepack\threepack\components\updateUser\createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + sendMessage(val){ + this.isShowDialog=ture; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141353.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141353.vue new file mode 100644 index 0000000..3941e8f --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141353.vue @@ -0,0 +1,390 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "../components/updateUser/createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + sendMessage(val){ + this.isShowDialog=ture; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141438.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141438.vue new file mode 100644 index 0000000..6392253 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141438.vue @@ -0,0 +1,390 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "../components/updateUser/createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141721.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141721.vue new file mode 100644 index 0000000..9a4ec39 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141721.vue @@ -0,0 +1,396 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyCreate from "../components/updateUser/createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141756.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141756.vue new file mode 100644 index 0000000..db194cf --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141756.vue @@ -0,0 +1,396 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import { MyCreate } from "../components/updateUser/createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106141846.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106141846.vue new file mode 100644 index 0000000..eae1acc --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106141846.vue @@ -0,0 +1,396 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <MyCreate @closeMyDialog="closeDialog" :type="dialogType"></MyCreate> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +// import { sendMessage } from "@/api/operate/messageManagement"; +import { MyCreate } from "../components/updateUser/createSms"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106142532.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106142532.vue new file mode 100644 index 0000000..171147f --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106142532.vue @@ -0,0 +1,440 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106142819.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106142819.vue new file mode 100644 index 0000000..171147f --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106142819.vue @@ -0,0 +1,440 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106143020.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106143020.vue new file mode 100644 index 0000000..ec94eb7 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106143020.vue @@ -0,0 +1,441 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit' + +export default { + components: { updateUser, scoreView }, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106143336.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106143336.vue new file mode 100644 index 0000000..00e7063 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106143336.vue @@ -0,0 +1,441 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit' + +export default { + components: { updateUser, scoreView , MyEditor}, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106143520.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106143520.vue new file mode 100644 index 0000000..23f2358 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106143520.vue @@ -0,0 +1,441 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit' + +export default { + components: { updateUser, scoreView , MyEditor}, + + created() { + this.search(); + }, + + props: ["model"], + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106143827.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106143827.vue new file mode 100644 index 0000000..f702d47 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106143827.vue @@ -0,0 +1,482 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit' + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02' + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106144109.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106144109.vue new file mode 100644 index 0000000..84bae87 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106144109.vue @@ -0,0 +1,490 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit' + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02' + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106144154.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106144154.vue new file mode 100644 index 0000000..d1d9be1 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106144154.vue @@ -0,0 +1,498 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit' + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02' + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106144253.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106144253.vue new file mode 100644 index 0000000..e489229 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106144253.vue @@ -0,0 +1,499 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02' + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + } + } + } + } +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/components/content_20230106144413.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106144413.vue new file mode 100644 index 0000000..cb7a10a --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106144413.vue @@ -0,0 +1,586 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02' + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106144438.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106144438.vue new file mode 100644 index 0000000..be3e769 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106144438.vue @@ -0,0 +1,586 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02' + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106144748.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106144748.vue new file mode 100644 index 0000000..a959f4a --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106144748.vue @@ -0,0 +1,591 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106145110.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106145110.vue new file mode 100644 index 0000000..3c600b7 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106145110.vue @@ -0,0 +1,610 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106145954.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106145954.vue new file mode 100644 index 0000000..5a2f666 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106145954.vue @@ -0,0 +1,611 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + }); + this.search(); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150040.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150040.vue new file mode 100644 index 0000000..c79c10a --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150040.vue @@ -0,0 +1,611 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150230.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150230.vue new file mode 100644 index 0000000..8d01df9 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150230.vue @@ -0,0 +1,612 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.role=null; + this.search(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150301.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150301.vue new file mode 100644 index 0000000..e52ed38 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150301.vue @@ -0,0 +1,612 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + this.role=null;s + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150302.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150302.vue new file mode 100644 index 0000000..df63ba3 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150302.vue @@ -0,0 +1,612 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + this.role=null; + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150356.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150356.vue new file mode 100644 index 0000000..c79c10a --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150356.vue @@ -0,0 +1,611 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150605.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150605.vue new file mode 100644 index 0000000..406de6d --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150605.vue @@ -0,0 +1,617 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.setDepartList(); + this.$refs.user.resetFields(); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150611.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150611.vue new file mode 100644 index 0000000..cbe1270 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150611.vue @@ -0,0 +1,617 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + targetTo: [ + { required: true , trigger: "blur", message: '璇烽�夋嫨鎺ユ敹瀵硅薄' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150656.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150656.vue new file mode 100644 index 0000000..49c3b46 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150656.vue @@ -0,0 +1,614 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessage } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106150721.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106150721.vue new file mode 100644 index 0000000..ef2a123 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106150721.vue @@ -0,0 +1,614 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106151211.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106151211.vue new file mode 100644 index 0000000..5fe3215 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106151211.vue @@ -0,0 +1,618 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + this.role.body=''; + this.role.head=''; + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + this.role.body=''; + this.role.head=''; + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106151314.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106151314.vue new file mode 100644 index 0000000..249bc36 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106151314.vue @@ -0,0 +1,619 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.$emit('closeMyDialog'); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + this.role.body=''; + this.role.head=''; + this.colList=null; + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + this.role.body=''; + this.role.head=''; + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106151348.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106151348.vue new file mode 100644 index 0000000..bbbf3fc --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106151348.vue @@ -0,0 +1,619 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.isShowDialog=false; + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + this.role.body=''; + this.role.head=''; + this.colList=null; + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + this.role.body=''; + this.role.head=''; + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106151542.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106151542.vue new file mode 100644 index 0000000..c2801db --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106151542.vue @@ -0,0 +1,620 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.isShowDialog=false; + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + this.role.body=''; + this.role.head=''; + this.colList=null; + this.messageType=null; + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + this.role.body=''; + this.role.head=''; + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106151642.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106151642.vue new file mode 100644 index 0000000..fe0ded1 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106151642.vue @@ -0,0 +1,621 @@ +<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> + <el-button + v-if="isStorePage()" + type="primary" + icon="el-icon-plus" + class="button-addition" + @click="handleView(null, 'create')" + >娣诲姞</el-button + > + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)" + >鎺ㄩ�佷俊鎭�</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="60%" + :destroy-on-close="true" + title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView" + > + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog + title="鏂板缓娑堟伅" + :destroy-on-close="true" + :key="dialogType" + :visible.sync="isShowDialog" + width="80%" + :before-close="handleConfirmClose" + > + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" + label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" + :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber" ></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView , MyEditor}, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber:null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr:[], + info: {}, + sendUser:"" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.isShowDialog=false; + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj){ + var _this=this + SMS.getSMSTemplateById(obj).then((result) =>{ + _this.role.head=result.title + _this.role.body=result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + this.role.body=''; + this.role.head=''; + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + this.role.body=''; + this.role.head=''; + }, + sendMessage(val){ + this.isShowDialog=true; + this.role.phoneNumber=val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .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/.history/src/views/operate/fivepack/threepack/components/content_20230106151736.vue b/.history/src/views/operate/fivepack/threepack/components/content_20230106151736.vue new file mode 100644 index 0000000..c7b2580 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/components/content_20230106151736.vue @@ -0,0 +1,543 @@ +<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> + <el-button v-if="isStorePage()" type="primary" icon="el-icon-plus" class="button-addition" + @click="handleView(null, 'create')">娣诲姞</el-button> + </div> + </header> + <main> + <!-- 鏁版嵁灞曠ず --> + <el-table ref="multipleTable" :header-cell-style="{ + '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="status" label="鐘舵��" min-width="10"> + <template slot-scope="scope"> + <span>{{ scope.row.status == 1 ? '缁忚惀' : '鍊掗棴' }}</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" + @click="sendMessage(scope.row.contact)">鎺ㄩ�佷俊鎭�</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="60%" :destroy-on-close="true" title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView"> + <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog title="鏂板缓娑堟伅" :destroy-on-close="true" :key="dialogType" :visible.sync="isShowDialog" width="80%" + :before-close="handleConfirmClose"> + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber"></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> + </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 scoreView from "@/views/operate/fivepack/threepack/components/score"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; + +export default { + components: { updateUser, scoreView, MyEditor }, + created() { + this.search(); + this.getSMSTemplateList(); + }, + + props: ["model"], + + data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + dialogScore: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + dialogType: "", + isShowDialog: false, + storeInfo: null, + storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber: null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr: [], + info: {}, + sendUser: "" + }; + }, + + methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.isShowDialog = false; + this.role.body = ''; + this.role.head = ''; + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj) { + var _this = this + SMS.getSMSTemplateById(obj).then((result) => { + _this.role.head = result.title + _this.role.body = result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + this.role.body = ''; + this.role.head = ''; + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + this.role.body = ''; + this.role.head = ''; + }, + sendMessage(val) { + this.isShowDialog = true; + this.role.phoneNumber = val; + }, + search() { + const status = this.storeStatus === 0 ? null : this.storeStatus; + getStoreInfoList({ keyword: this.storeCode, status }) + .then(({ list, pageSize, totalPage }) => { + this.tableData = list; + console.log(list); + this.pageSize = pageSize; + this.totalNum = totalPage; + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleReset() { + this.storeCode = ""; + this.storeStatus = null; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.dialogType = type; + }, + handleScoreView(row) { + this.storeInfoScoreView = row; + this.dialogScore = true; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + handleCloseScoreView() { + this.dialogScore = false; + }, + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + + isStorePage() { + 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; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + + .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/.history/src/views/operate/fivepack/threepack/index_20221228101401.vue b/.history/src/views/operate/fivepack/threepack/index_20221228101401.vue new file mode 100644 index 0000000..2ad75c1 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/index_20221228101401.vue @@ -0,0 +1,149 @@ +<template> + <el-container style="height: 100%"> + <el-aside heigth="100%" width="200px "> + <myAside @selectedDepartment="selectedDepartment" /> + </el-aside> + + <el-container> + <store-content :model="'three-pack'" /> + </el-container> + </el-container> +</template> +<script> +import myAside from "./components/aside"; +import updateUser from "@/views/operate/fivepack/threepack/components/updateUser"; +import storeContent from "@/views/operate/fivepack/threepack/components/content"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; + +export default { + components: { myAside, storeContent, updateUser }, + + created() { + this.search(); + }, + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + updateFlag: false, + storeInfo: null, + }; + }, + + methods: { + search(data) { + let communityId, streetId; + if (data) { + communityId = data.id; + streetId = data.parentId; + } + getStoreInfoList({ keyword: this.storeCode, communityId, streetId }) + .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.storeStatus = null; + this.currentPage = 1; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.updateFlag = type === "update"; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message }); + this.currentPage = 1; + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.currentPage = 1; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + selectedDepartment(data) { + if (!data.children) { + this.searchData = data; + this.search(data); + } else { + data.parentId = data.id; + data.id = null; + this.searchData = data; + this.search(data); + } + this.currentPage = 1; + }, + }, +}; +</script> +<style lang="scss" scoped> +::v-deep .el-header { + // background-color: #09152f; + color: #000; + line-height: 60px; +} + +// ::v-deep .el-aside { + // background-color: #09152f; +// } + +// ::v-deep .el-menu { + // background-color: #09152f; +// } + +// ::v-deep .el-main, +// ::v-deep .el-footer { +// background-color: #09152f; +// } + +::v-deep .el-tree-node__label { + line-height: 30px; + font-size: 14px; + // color: rgb(75, 155, 183); +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/fivepack/threepack/index_20230106141041.vue b/.history/src/views/operate/fivepack/threepack/index_20230106141041.vue new file mode 100644 index 0000000..2ad75c1 --- /dev/null +++ b/.history/src/views/operate/fivepack/threepack/index_20230106141041.vue @@ -0,0 +1,149 @@ +<template> + <el-container style="height: 100%"> + <el-aside heigth="100%" width="200px "> + <myAside @selectedDepartment="selectedDepartment" /> + </el-aside> + + <el-container> + <store-content :model="'three-pack'" /> + </el-container> + </el-container> +</template> +<script> +import myAside from "./components/aside"; +import updateUser from "@/views/operate/fivepack/threepack/components/updateUser"; +import storeContent from "@/views/operate/fivepack/threepack/components/content"; +import { + getStoreInfoList, + deleteStoreInfo, +} from "@/api/operate/storeManagement"; + +export default { + components: { myAside, storeContent, updateUser }, + + created() { + this.search(); + }, + + data() { + return { + storeCode: null, + storeStatus: null, + options: [ + { label: "鍏ㄩ儴", value: 0 }, + { label: "缁忚惀", value: 1 }, + { label: "鍊掗棴", value: 2 }, + ], + tableData: [], + dialogUpdate: false, + currentPage: 1, + totalNum: 0, + pageSize: 10, + userInfo: null, + updateFlag: false, + storeInfo: null, + }; + }, + + methods: { + search(data) { + let communityId, streetId; + if (data) { + communityId = data.id; + streetId = data.parentId; + } + getStoreInfoList({ keyword: this.storeCode, communityId, streetId }) + .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.storeStatus = null; + this.currentPage = 1; + this.search(); + }, + + handleView(row, type) { + this.dialogUpdate = true; + this.storeInfo = row; + this.updateFlag = type === "update"; + }, + + handleDelete(id) { + deleteStoreInfo(id) + .then(() => { + this.$message({ type: "success", message }); + this.currentPage = 1; + this.search(); + }) + .catch((err) => this.$message({ type: "error", message: err })); + }, + + handleClose() { + this.dialogUpdate = false; + }, + + closeDialog() { + this.dialogUpdate = false; + this.currentPage = 1; + this.search(); + }, + + changeCurrentPage(currentPage) { + this.currentPage = currentPage; + this.search(); + }, + + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + selectedDepartment(data) { + if (!data.children) { + this.searchData = data; + this.search(data); + } else { + data.parentId = data.id; + data.id = null; + this.searchData = data; + this.search(data); + } + this.currentPage = 1; + }, + }, +}; +</script> +<style lang="scss" scoped> +::v-deep .el-header { + // background-color: #09152f; + color: #000; + line-height: 60px; +} + +// ::v-deep .el-aside { + // background-color: #09152f; +// } + +// ::v-deep .el-menu { + // background-color: #09152f; +// } + +// ::v-deep .el-main, +// ::v-deep .el-footer { +// background-color: #09152f; +// } + +::v-deep .el-tree-node__label { + line-height: 30px; + font-size: 14px; + // color: rgb(75, 155, 183); +} +</style> \ No newline at end of file diff --git a/.history/src/views/operate/message/myIndex/update/index_20230104153319.vue b/.history/src/views/operate/message/myIndex/update/index_20230104153319.vue new file mode 100644 index 0000000..1c310b7 --- /dev/null +++ b/.history/src/views/operate/message/myIndex/update/index_20230104153319.vue @@ -0,0 +1,522 @@ +<template> + <div class="createUser"> + <main> + <div class="mainContent"> + <el-form + ref="user" + label-width="140px" + autoComplete="on" + :model="role" + :rules="createRoleRules" + label-position="right" + :disabled="type === 'view'" + > + <!-- 鎻愰啋鏂瑰紡 --> + <el-form-item class="optionItem" label="鎻愰啋鏂瑰紡:" prop="channelCode" > + <el-radio-group v-model="role.channelCode"> + <el-radio label="01">绔欏唴淇�</el-radio> + <el-radio label="03">閭欢</el-radio> + </el-radio-group> + <span class="message-tip">(鐭俊鍙敤鏁�: 1000鏉�)</span> + </el-form-item> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item + v-if="role.channelCode === '01'" + class="optionItem" + label="娑堟伅鏍忕洰:" + prop="messageType" + > + <div class="message-item"> + <div class="message-item__left"> + <el-select + v-model="role.messageType" + placeholder="璇烽�夋嫨娑堟伅鏍忕洰" + > + <el-option + v-for="item in colList" + :key="item.id" + :label="item.columnName" + :value="item.id" + > + </el-option> + </el-select> + </div> + <span class="message-add" @click="dialogCreate = true"> + 娣诲姞鏍忕洰</span + > + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="娑堟伅鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input + v-model="role.head" + placeholder="璇烽�夋嫨娑堟伅鏍囬" + ></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹瀵硅薄:" prop="targetTo"> + <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹瀵硅薄"> + <el-option :value="role.targetTo"> + <el-tree + ref="tree" + :data="departList" + :props="defaultProps" + show-checkbox + @check="handleCheck" + default-expand-all + :default-checked-keys="checkedList" + node-key="id" + > + </el-tree> + </el-option> + </el-select> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + <el-form-item> + <div class="optionBtn"> + <el-button + type="primary" + @click.native.prevent="handleSubmit(0)" + class="btn save" + v-if="type !== 'view'" + >淇濆瓨 + </el-button> + <el-button + type="primary" + @click.native.prevent="handleSubmit(1)" + class="btn submit" + v-if="type !== 'view'" + >鍙戝竷 + </el-button> + <el-button + type="primary" + @click.native.prevent="handleView" + class="btn submit" + v-if="type !== 'view'" + >棰勮 + </el-button> + <el-button class="btn cancel" @click.native.prevent="handleReset" v-if="type !== 'view'" + >閲嶇疆</el-button + > + </div> + </el-form-item> + </el-form> + <!-- 鏂板鏍忕洰 --> + <el-dialog + title="娣诲姞鏍忕洰" + :visible.sync="dialogCreate" + v-if="dialogCreate" + width="60%" + :before-close="handleConfirmClose" + append-to-body + > + <MyColumnAdd @closeDialog="closeDialog"></MyColumnAdd> + </el-dialog> + <!-- 棰勮娑堟伅 --> + <el-dialog + title="娑堟伅棰勮" + :visible.sync="dialogView" + v-if="dialogView" + width="60%" + :before-close="handleConfirmClose" + append-to-body + > + <MyColView :info="info" @closeDialog="closeDialog"></MyColView> + </el-dialog> + </div> + </main> + </div> +</template> +<script> +import MyEditor from "@/components/edit"; +import MyColumnAdd from "@/views/operate/message/mycontrol/createUser"; +import MyColView from "../messageView"; +import { sendMessage, updateMessage, getMessageById,saveMessage } from "@/api/operate/messageManagement"; + +export default { + components: { MyEditor, MyColumnAdd, MyColView }, + props: ["type", "myDataRow"], + data() { + const validateEditor = (rule, value, callback) => { + if (value) { + callback(); + } else { + callback(new Error('璇疯緭鍏�')); + } + }; + return { + role: { + messageType: null, + head: "", + targetTo: "", + body: "", + channelCode: null, + }, + createRoleRules: { + messageType: [ + { + required: true, + trigger: ["blur", "change"], + message: "璇疯緭鍏ユ秷鎭爮鐩�", + }, + ], + head: [{ required: true, trigger: "blur", message: "璇烽�夋嫨娑堟伅鏍囬" }], + targetTo: [ + { required: true, trigger: "blur", message: "璇烽�夋嫨鎺ュ彈瀵硅薄" }, + ], + body: [ + { + required: true, + validator: validateEditor + }, + ], + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: "children", + label: "departName", + }, + checkedList: [], + tempNameArr: [], + info: {}, + sendUser: "", + }; + }, + created() { + this.getColumnList(); + this.getDepartList(); + this.getLoginUserInfo(); + if (this.type !== "create" && this.myDataRow) { + getMessageById(this.myDataRow.id) + .then(res => { + this.role = res; + if (res.targetTo) { + this.checkedList = res.targetTo.split(','); + this.role.targetTo = `${this.checkedList.length}浜篳; + } + }) + .catch(err => this.$message.error(`${err}`)) + } + }, + mounted() { + if (this.type !== 'create') { + this.$refs.edit.editor.txt.append(this.myDataRow.body); + } + + }, + methods: { + // 鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then((_) => { + done(); + }); + }, + + // 鑾峰彇鏍忕洰 + async getColumnList() { + await this.$axios({ + method: "get", + url: "sccg/message_column/getShowColumn", + }).then((res) => { + this.colList = res.data; + }); + }, + // 鍏抽棴寮圭獥 + closeDialog({ flag, index }) { + this.dialogCreate = flag; + if (index === 1) { + // 閲嶆柊璁剧疆鏍忕洰 + this.getColumnList(); + } + }, + getType(){ + return this.type; + }, + // 鑾峰彇閮ㄩ棬鏍� + async getDepartList() { + await this.$axios({ + method: "get", + url: "sccg/depart/tree", + }).then((res) => { + res.data.forEach((item) => { + this.departList.push(this.setChildren(item)); + }); + }); + }, + + // 閫掑綊children + setChildren(obj) { + if (obj.children !== null) { + if (obj.children.length !== 0) { + obj.children.forEach((item) => { + return this.setChildren(item); + }); + } + } else { + if (obj.userInfoDTOS.length !== 0) { + obj.children = []; + obj.userInfoDTOS.forEach((item) => { + obj.children.push({ id: item.userId, departName: item.username }); + }); + } + } + return obj; + }, + + // 閫変腑id + handleCheck(data, node) { + const checkedNodes = node.checkedNodes.filter(item => !item.children); + this.checkedList = checkedNodes.map(item => item.id); + this.tempNameArr = checkedNodes.map(item => item.departName); + this.role.targetTo = this.checkedList.length ? this.checkedList.length + "浜�" : null; + }, + + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + if(mystatus==1){ + const { body, head, messageType, channelCode } = this.role; + const params = { + body, + head, + messageType, + channelCode: `${channelCode}`, + sendTime: new Date(), + targetTo: this.checkedList.join(","), + status: mystatus, + }; + if (this.role.channelCode === '03') { + delete params.messageType; + } + if (this.type === "create") { + sendMessage(params) + .then(() => { + this.$emit("closeMyDialog"); + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + }) + .catch((err) => + this.$message({ + type: "error", + message: err.data || err.message, + }) + ); + } else { + updateMessage({ id: this.myDataRow.id, ...params }) + .then(() => { + this.$emit("closeMyDialog"); + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + }) + .catch((err) => + this.$message({ + type: "error", + message: err.data || err.message, + }) + ); + } + } + if(mystatus==0){ + const { body, head, messageType, channelCode } = this.role; + const params = { + body, + head, + messageType, + channelCode: `${channelCode}`, + sendTime: new Date(), + targetTo: this.checkedList.join(","), + status: mystatus, + }; + if (this.role.channelCode === '03') { + delete params.messageType; + } + if (this.type === "create") { + saveMessage(params) + .then(() => { + this.$emit("closeMyDialog"); + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + }) + .catch((err) => + this.$message({ + type: "error", + message: err.data || err.message, + }) + ); + } else { + updateMessage({ id: this.myDataRow.id, ...params }) + .then(() => { + this.$emit("closeMyDialog"); + this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" }); + }) + .catch((err) => + this.$message({ + type: "error", + message: err.data || err.message, + }) + ); + } + } + + } else { + this.$message.error({ type: "warning", message: "璇锋鏌ュ繀濉」" }); + } + }); + }, + + // 閲嶇疆琛ㄥ崟 + handleReset() { + this.$refs.edit.editor.txt.clear(); + this.$refs.user.resetFields(); + }, + + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅 + getLoginUserInfo() { + const name = sessionStorage.getItem("name"); + this.$axios({ + method: "get", + url: "sccg/admin/info?name=" + name, + }).then((res) => { + this.role.targetFrom = res.data.userId; + this.sendUser = res.data.username; + }); + }, + + // 娑堟伅棰勮 + handleView() { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const { body, head, channelCode } = this.role; + this.dialogView = true; + this.info = { + body, + head, + channelCode: + channelCode === "01" + ? "绔欏唴淇�" + : channelCode === "03" + ? "閭欢" + : "鐭俊", + messageType: this.role.messageType, + targetTo: this.tempNameArr, + targetFrom: this.sendUser + }; + } else { + this.$message({ type: "warning", message: "璇锋鏌ュ繀濉」" }); + } + }); + } + }, +}; +</script> +<style lang="scss" scoped> +.createUser { + border-radius: 1px; + background-color: white; + + main { + text-align: left; + padding: 0 55px; + background-color: white; + + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + &:deep(.el-dialog__title) { + //color: #4b9bb7; + } + &::v-deep .el-form-item__label { + //color: #4b9bb7; + } + + &::v-deep .el-input__inner { + width: 400px; + //background-color: #09152f; + //border: 1px solid #17324c; + } + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + :deep(.el-input) { + width: 400px; + } + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #606266; + } + } + + .message-tip { + margin-left: 20px; + } + + :deep(.el-input--suffix) { + width: 400px; + } + + // &::v-deep .el-textarea__inner { + // //background-color: #09152f; + // //border: 1px solid #17324c; + // } + + .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; + } + } + } + } +} +</style> diff --git a/src/api/operate/messageManagement.js b/src/api/operate/messageManagement.js index c9a3fa0..24f2a77 100644 --- a/src/api/operate/messageManagement.js +++ b/src/api/operate/messageManagement.js @@ -16,6 +16,10 @@ return http.post('/sccg/message/sendMessage', params); } +export function sendMessageByMobileNumber(params) { + return http.post('/sccg/message/send_message_phone', params); +} + export function saveMessage(params) { return http.post('/sccg/message/saveMessage', params); } diff --git a/src/views/operate/fivepack/threepack/components/content.vue b/src/views/operate/fivepack/threepack/components/content.vue index 9e7e0b5..c7b2580 100644 --- a/src/views/operate/fivepack/threepack/components/content.vue +++ b/src/views/operate/fivepack/threepack/components/content.vue @@ -5,56 +5,31 @@ <div class="find"> <div class="search-item"> <span>杈撳叆鏌ヨ:</span> - <el-input - style="flex: 1" - :placeholder=" - isStorePage() ? '搴楅摵锛堥棬搴楋級鍚嶇О' : '璇疯緭鍏ュ簵閾虹紪鍙�' - " - v-model="storeCode" - /> + <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-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 - > + <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> - <el-button - v-if="isStorePage()" - type="primary" - icon="el-icon-plus" - class="button-addition" - @click="handleView(null, 'create')" - >娣诲姞</el-button - > + <el-button v-if="isStorePage()" type="primary" icon="el-icon-plus" class="button-addition" + @click="handleView(null, 'create')">娣诲姞</el-button> </div> </header> <main> <!-- 鏁版嵁灞曠ず --> - <el-table - ref="multipleTable" - :header-cell-style="{ - 'font-weight': '650', - 'line-height': '45px', - }" - :data="tableData" - style="width: 100%" - :row-class-name="tableRowClassName" - > + <el-table ref="multipleTable" :header-cell-style="{ + '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> @@ -64,11 +39,7 @@ </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 prop="storeAddress" label="搴楅摵璇︾粏鍦板潃" min-width="10"> </el-table-column> <el-table-column prop="storeScore" label="搴楅摵绉垎" min-width="10"> </el-table-column> @@ -79,90 +50,94 @@ </el-table-column> <el-table-column prop="status" label="鐘舵��" min-width="10"> <template slot-scope="scope"> - <span>{{ scope.row.status==1?'缁忚惀':'鍊掗棴' }}</span> + <span>{{ scope.row.status == 1 ? '缁忚惀' : '鍊掗棴' }}</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 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 - > + @click="sendMessage(scope.row.contact)">鎺ㄩ�佷俊鎭�</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 - > + <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 :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="60%" - :destroy-on-close="true" - title="鏌ョ湅绉垎" - :before-close="handleCloseScoreView" - > + <el-dialog :visible.sync="dialogScore" width="60%" :destroy-on-close="true" title="鏌ョ湅绉垎" + :before-close="handleCloseScoreView"> <scoreView v-if="dialogScore" :storeInfo="storeInfoScoreView" /> + </el-dialog> + <!-- 鏂板缓娑堟伅 --> + <el-dialog title="鏂板缓娑堟伅" :destroy-on-close="true" :key="dialogType" :visible.sync="isShowDialog" width="80%" + :before-close="handleConfirmClose"> + <div class="mainContent"> + <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="rules" label-position="right"> + <!-- 娑堟伅鏍忕洰 --> + <el-form-item class="optionItem" label="鐭俊妯℃澘:" prop="messageType"> + <div class="message-item"> + <div class="message-item__left"> + <el-select v-model="role.messageType" placeholder="璇烽�夋嫨鐭俊妯℃澘" @change="setTemplateValue"> + <el-option v-for="item in colList" :key="item.id" :label="item.title" :value="item.id"> + </el-option> + </el-select> + </div> + </div> + </el-form-item> + <!-- 娑堟伅鏍囬 --> + <el-form-item class="optionItems" label="鐭俊鏍囬:" prop="head"> + <div class="message-item__left"> + <el-input v-model="role.head" placeholder="璇烽�夋嫨鐭俊鏍囬"></el-input> + </div> + </el-form-item> + <!-- 鎺ユ敹瀵硅薄 --> + <el-form-item class="optionItem" label="鎺ユ敹鎵嬫満鍙�:" prop="targetTo"> + <!-- <div class="message-item__left"> + <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹鎺ユ敹鎵嬫満鍙�" > + <el-option :value="role.targetTo"> + <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox + @check="handleCheck" default-expand-all node-key="id"> + </el-tree> + </el-option> + </el-select> --> + <!-- </div> --> + <div class="message-item__left"> + <el-input v-model="role.phoneNumber"></el-input> + </div> + </el-form-item> + <!-- 娑堟伅鍐呭 --> + <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body"> + <MyEditor ref="edit"></MyEditor> + </el-form-item> + + <el-form-item> + <div class="optionBtn"> + <el-button type="primary" @click.native.prevent="handleSubmit(2)" class="btn submit">鍙戝竷</el-button> + <el-button class="btn cancel" @click.native.prevent="handleResetq">閲嶇疆</el-button> + </div> + </el-form-item> + </el-form> + </div> </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 background :current-page="currentPage" layout="prev, pager, next" :total="totalNum" + :page-size="pageSize" @current-change="changeCurrentPage"> </el-pagination> </div> </main> @@ -175,17 +150,27 @@ getStoreInfoList, deleteStoreInfo, } from "@/api/operate/storeManagement"; +import { sendMessageByMobileNumber } from "@/api/operate/messageManagement"; +import MyEditor from '@/components/edit'; +import SMS from "@/api/operate/SMS"; export default { - components: { updateUser, scoreView }, - + components: { updateUser, scoreView, MyEditor }, created() { this.search(); + this.getSMSTemplateList(); }, props: ["model"], data() { + const validateMessageContent = (rule, value, callback) => { + if (!value) { + callback(new Error('璇疯緭鍏ョ煭淇″唴瀹�')); + } else { + callback(); + } + } return { storeCode: null, storeStatus: null, @@ -202,12 +187,109 @@ pageSize: 10, userInfo: null, dialogType: "", + isShowDialog: false, storeInfo: null, storeInfoScoreView: {}, + role: { + messageType: '', + head: '', + targetTo: '', + targetFrom: null, + body: '', + channelCode: '02', + phoneNumber: null, + }, + rules: { + messageType: [ + { required: true, trigger: ['blur', 'change'], message: '璇烽�夋嫨鐭俊妯℃澘' }, + ], + head: [ + { required: true, trigger: "blur", message: '璇疯緭鍏ョ煭淇℃爣棰�' }, + ], + body: [ + { required: true, trigger: ['blur', 'change'], validator: validateMessageContent } + ] + }, + colList: [], + departList: [], + typeList: [], + dialogCreate: false, + dialogView: false, + defaultProps: { + children: 'children', + label: 'departName' + }, + checkedList: [], + tempNameArr: [], + info: {}, + sendUser: "" }; }, methods: { + // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) + handleSubmit(mystatus) { + this.role.body = this.$refs.edit.editor.txt.html(); + this.$refs.user.validate((valid) => { + if (valid) { + const params = Object.assign({}, this.role); + params.targetTo = this.checkedList.join(','); + params.status = mystatus; + sendMessageByMobileNumber(params) + .then(() => { + this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' }); + this.isShowDialog = false; + this.role.body = ''; + this.role.head = ''; + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }) + .catch(err => this.$message({ type: 'error', message: err })); + } else { + this.$message.warning('璇锋鏌ュ繀濉」'); + } + }) + }, + setTemplateValue(obj) { + var _this = this + SMS.getSMSTemplateById(obj).then((result) => { + _this.role.head = result.title + _this.role.body = result.body + _this.$refs.edit.editor.txt.html(result.body) + }) + }, + getSMSTemplateList() { + SMS.getSMSTemplateList({ current: 1, pageSize: 100 }) + .then(({ records }) => { + this.colList = records; + }) + .catch(err => this.$message.error(err)) + }, + // 纭鍏抽棴寮圭獥 + handleConfirmClose(done) { + this.$confirm("纭鍏抽棴?").then(() => { + done(); + this.search(); + this.role.body = ''; + this.role.head = ''; + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + }); + }, + // 閲嶇疆琛ㄥ崟 + handleResetq() { + this.$refs.edit.editor.txt.clear(); + this.search(); + this.$refs.user.resetFields(); + this.role.body = ''; + this.role.head = ''; + }, + sendMessage(val) { + this.isShowDialog = true; + this.role.phoneNumber = val; + }, search() { const status = this.storeStatus === 0 ? null : this.storeStatus; getStoreInfoList({ keyword: this.storeCode, status }) @@ -318,6 +400,94 @@ margin-top: 20px; padding-bottom: 50px; + .mainContent { + display: flex; + justify-content: center; + padding-top: 50px; + //&:deep(.el-dialog__title) { + // color: #4b9bb7; + //} + //&::v-deep .el-form-item__label { + // color: #4b9bb7; + //} + // + //&::v-deep .el-input__inner { + // width: 400px; + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .message-item__left { + width: 400px; + } + + .message-add { + &:hover { + cursor: pointer; + } + } + + .el-form-item__content :deep(.el-select) { + width: 400px; + } + + //:deep(.el-input) { + // width: 400px; + //} + + .message-item { + display: flex; + + span { + margin-left: 20px; + color: #4b9bb7; + } + } + + .message-tip { + margin-left: 20px; + } + + //:deep(.el-input--suffix) { + // width: 400px; + //} + // + //&::v-deep .el-textarea__inner { + // background-color: #09152f; + // border: 1px solid #17324c; + //} + + .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; + } + } + } + .mainTitle { line-height: 60px; } @@ -337,6 +507,7 @@ justify-content: center; .el-pagination { + &::v-deep li, &::v-deep .btn-prev, &::v-deep .btn-next { diff --git a/src/views/operate/message/myIndex/update/index.vue b/src/views/operate/message/myIndex/update/index.vue index 8bdd313..1c310b7 100644 --- a/src/views/operate/message/myIndex/update/index.vue +++ b/src/views/operate/message/myIndex/update/index.vue @@ -284,7 +284,6 @@ // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅) handleSubmit(mystatus) { - debugger; this.role.body = this.$refs.edit.editor.txt.html(); this.$refs.user.validate((valid) => { if (valid) { -- Gitblit v1.8.0