123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- <template>
- <div class="updCodeWBox" v-loading="loading" :element-loading-text="loadingStr">
- <!-- <div class="updCodeWBox-title">
- <p>弱歸戶</p>
- </div>
- <el-divider border-style="dashed" /> -->
- <div style="line-height: 1px;height: 100%;overflow: auto;">
- <div style="margin-bottom: 10px;">
- <h3>區域</h3>
- <el-radio-group class="radioSty" v-model="countryId" @change="cIdChange">
- <el-radio label="CN" size="large" border>大陆地区</el-radio>
- <el-radio label="TW" size="large" border>臺灣地區</el-radio>
- </el-radio-group>
- </div>
-
- <div style="margin-bottom: 10px;" v-if="provinceIdData != null">
- <h3>省/直轄市</h3>
- <el-radio-group class="radioSty" v-model="provinceId" @change="pIdChange">
- <el-radio size="large" :label="p.provinceId" border v-for="p in provinceIdData">{{ p.provinceName }}</el-radio>
- </el-radio-group>
- </div>
- <div style="margin-bottom: 10px;" v-if="cityIdData != null">
- <h3>市/界</h3>
- <el-radio-group class="radioSty" v-model="cityId">
- <el-radio size="large" :label="c.cityId" border v-for="c in cityIdData" @click="searchSchool(c.cityId)">{{ c.cityName }}</el-radio>
- </el-radio-group>
- </div>
- <div style="margin-bottom: 10px;margin-top: 70px;">
- <div style="display: flex;justify-content: center;align-items: center;">
- <span style="font-weight: bold;font-size: 23px;margin-right: 5px;">搜尋</span>
- <el-input v-model="wordFilter" placeholder="請填入簡碼或學校名稱" style="width: 500px;"/>
- </div>
- <el-table :data="showData" stripe style="width: 100%" >
- <el-table-column prop="code" label="代碼" />
- <el-table-column prop="shortCode" label="簡碼" />
- <el-table-column prop="name" label="學校名稱" />
- <el-table-column label="">
- <template #default="scope">
- <el-button type="primary" size="small" @click="handleUpdSchoolW(scope.row.id, scope.row.name, scope.row.shortCode)">歸戶</el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- </div>
- </div>
- </template>
- <script setup>
- import country from '@/static/country.json'
- import { h, reactive, ref, computed, getCurrentInstance, markRaw } from 'vue'
- import { SuccessFilled, Warning } from '@element-plus/icons'
- import { ElMessageBox, ElMessage, ElInput, ElForm, ElFormItem } from 'element-plus'
- let { proxy } = getCurrentInstance()
- const loading = ref(false)
- const countryId = ref(null)
- const provinceId = ref(null)
- const provinceIdData = ref(null)
- const cityId = ref(null)
- const cityIdData = ref(null)
- const tableData = ref([])
- const wordFilter = ref('')
- const loadingStr = ref('')
- const cIdChange = (cId) => {
- cityId.value = null
- provinceId.value = null
- provinceIdData.value = null
- cityIdData.value = null
- switch(cId){
- case 'TW':
- cityIdData.value = country.filter(function(c){
- return c.countryId == cId && c.lang == 'zh-tw' && c.areaType == 'y'
- })
- break;
- case 'CN':
- provinceIdData.value = country.filter(function(c){
- return c.countryId == cId && c.lang == 'zh-cn' && c.areaType == 'p'
- })
- break;
- }
- }
- const pIdChange = (provinceId) =>{
- cityId.value = null
- cityIdData.value = null
- let lang = ''
- switch(countryId.value){
- case 'TW':
- lang = 'zh-tw'
- break;
- case 'CN':
- lang = 'zh-cn'
- break;
- }
- cityIdData.value = country.filter(function(c){
- return c.provinceId == provinceId && c.lang == lang && c.areaType == 'y'
- })
- }
- const searchSchool = async (cityId) =>{
- let data = {
- countryId: countryId.value,
- cityId: cityId,
- fullData: true
- }
- if(provinceId.value != null) {
- data.provinceId = provinceId.value
- }
- wordFilter.value = ''
- loadingStr.value = '搜索學校中...'
- loading.value = true
- await proxy.$api.getSchooBasicInfo(data).then((res) => {
- tableData.value = res
- }).catch(e=>{
- ElMessage.error('搜尋失敗')
- }).finally(() => {
- loading.value = false
- })
- }
- const showData = computed({
- get(){
- if(wordFilter.value != ''){
- let result = []
- console.log(wordFilter.value, 'wordFilter.value')
- tableData.value.forEach((f)=>{
- if(f.name.indexOf(wordFilter.value) >= 0){
- result.push(f)
- } else if(f.shortCode && f.shortCode.indexOf(wordFilter.value) >= 0){
- result.push(f)
- }
- })
- return result
- } else {
- return tableData.value
- }
- }
- })
- const handleUpdSchoolW = async (schDocId, schName, shortCode) =>{
- const iDsCount = ref(0)
- // 檢查array 內容是否重複
- function isArrayRep(array){
- var result = new Set();
- var repeat = new Set();
- array.forEach(item => {
- result.has(item) ? repeat.add(item) : result.add(item);
- })
- // console.log(result); // {1, 2, "a", 3, "b"}
- // console.log(repeat); // {1, "a"}
- // console.log(repeat.size)
- if(repeat.size != 0){
- return true
- } else {
- return false
- }
- }
- // 規則檢查: iDs
- const checkIds = (value) => {
- let isErr = false
- if(!value) {
- isErr = true
- return "請填入要歸戶的醍摩豆ID"
- } else if(value && !/^[0-9\n]+$/.test(value)){
- isErr = true
- return "只能輸入醍摩豆ID與換行"
- } else if(value && isArrayRep(value.split('\n'))){
- isErr = true
- return "醍摩豆ID有重複"
- } else if(value){
- let errIds = []
- let tmp = value.split('\n')
- tmp.forEach(e=> {
- if(e.length != 10) {
- errIds.push(e)
- } else {
- let now = Math.floor(new Date().getTime() / 1000)
- let orgId = parseInt(e)
- if(parseInt(e.substring(0, 1)) >= 6){
- orgId -= 5000000000
- }
- if(orgId > now){
- errIds.push(e)
- }
- }
- })
- if(errIds.length > 0){
- // console.log(errIds, 'errIds')
- isErr = true
- return "請檢查醍摩豆ID是否符合格式或有空格"
- }
- }
- if(!isErr && value != ''){
- let tArray = value.split('\n')
- iDsCount.value = tArray.length
- } else {
- iDsCount.value = 0
- }
- return true
- }
- if(!shortCode){
- ElMessageBox.alert('此學校目前沒有簡碼', `***${schName}***`,
- {
- type: 'warning',
- icon: markRaw(Warning),
- }
- )
- // 中斷
- return
- }
- ElMessageBox.prompt(
- '請填入要歸戶的醍摩豆ID', `歸戶至 ${schName} - ${shortCode}`, {
- confirmButtonText: '歸戶',
- cancelButtonText: '取消',
- inputType: 'textarea',
- inputValidator: checkIds,
- customClass: 'prompClass',
- roundButton: true,
- closeOnClickModal: false
- }
- ).then(({value})=>{
- let showStr = value.replaceAll('\n', ', ')
- ElMessageBox.confirm(
- `確認要歸戶以下的醍摩豆ID嗎?\n${showStr} \n\n 總共 ${iDsCount.value} 位`,
- `歸戶至 ${schName} - ${shortCode}`,
- {
- confirmButtonText: '確認',
- cancelButtonText: '先不要',
- type: 'info',
- customClass: 'confirmClass'
- }
- ).then(async ()=>{
- let reqData = {
- schoolDocId: schDocId,
- ids: value.split('\n')
- }
-
- loadingStr.value = '弱歸戶...'
- loading.value = true
- await proxy.$api.updUserSchoolW(reqData).then((res) => {
- ElMessageBox.alert('成功', '弱歸戶成功',
- {
- type: 'info',
- icon: markRaw(SuccessFilled),
- }
- )
- }).catch(e=>{
- ElMessage.error('搜尋失敗')
- }).finally(() => {
- loading.value = false
- })
- })
- })
- }
- </script>
- <style>
- .prompClass textarea{
- min-height: 220px!important;
- }
- .confirmClass p{
- white-space: pre-line;
- }
- .radioSty .el-radio__input{
- display: none;
- }
- .radioSty .el-radio__label{
- font-weight: bold;
- font-size: 15px!important;
- }
- .radioSty .el-radio{
- margin-right: 10px;
- }
- </style>
- <style scoped>
- .updCodeWBox{
- width: 100%;
- height: 82vh;
- background-color: #fff;
- z-index:999;
- box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3);
- border-radius: 10px;
- padding: 1%;
- text-align: left;
- }
- .updCodeWBox-title{
- line-height: 40px;
- font-size:24px;
- font-weight: bold;
- color:#7b84a9;
- text-align: center;
- }
- </style>
|