Files
17168ERP/web/admin/HR/reg.aspx
2025-08-29 01:27:25 +08:00

572 lines
34 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<%@ Page Title="後端管理" Language="C#" MasterPageFile="~/admin/Templates/TBS5ADM001/MasterPage.master" AutoEventWireup="true" CodeFile="reg.aspx.cs" Inherits="admin_hr_reg" ValidateRequest="false" %>
<%@ Register Src="~/admin/_uc/alert.ascx" TagPrefix="uc1" TagName="alert" %>
<asp:Content ID="Content1" ContentPlaceHolderID="page_header" runat="Server">
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="footer_script" runat="Server">
<%--<link href="<%=ResolveUrl("~/js/vuetify_ez.css")%>" rel="stylesheet" />--%>
<script>
function checkNumber(btn) {
$('#errormsg').hide();
var _txt = $(btn).val();
$.ajax({
method: "POST",
url: "reg.aspx",
data: {
type: 'chkNo',
txt: _txt,
id: '<%= Request["num"]%>'
},
error: function (xhr, status, error) {
var errorMessage = xhr.status + ': ' + xhr.statusText
//alert('Error - ' + errorMessage);
console.log('Error - ' + errorMessage);
}
}).done(function (data) {
if (data.isOk) {
} else {
console.log(data.msg);
$('#errormsg').text(data.msg);
$('#errormsg').show();
}
});
}
// 模組化工作: 結合: UC, MIXIN...
let VueApp = new Vue({
el: '#app',
vuetify: new Vuetify(vuetify_options),
data() {
return {
hr_id: '<%= Request["num"] %>',
admin_id: '<%=_admin_id %>',
options: {},
search_dialog: {
controls: {
search1: {
id: 'search1',
title: '信眾',
text_prop: 'f_number',
value_prop: 'num',
keys: [
{ id: 'f_number', title: '編號', value: '' },
{ id: 'u_name', title: '姓名', value: '' },
{ id: 'address', title: '地址', value: '' },
],
api_url: HTTP_HOST + 'api/follower/GetList',
columns: [
{ id: 'f_number', title: '編號'},
{ id: 'u_name', title: '姓名'},
{ id: 'address', title: '地址'},
],
selected: {},
select(t) {
console.log("select search1", t);
$('#<%= u_name.ClientID %>').val(t.u_name);
$('#<%= sex.ClientID %>').val(t.sex.replace('眾', ''));
$('#<%= birthday.ClientID %>').val(moment(t.birthday).format('YYYY-MM-DD'));
$('#<%= phone.ClientID %>').val(t.phoneDes);
$('#<%= refuge_name.ClientID %>').val(t.refuge_name);
$('#<%= refugedate.ClientID %>').val(moment(t.refugedate).format('YYYY-MM-DD'));
$('#<%= email.ClientID %>').val(t.email);
$('#<%= address2.ClientID %>').val(t.address);
}
},
search2: {
id: 'search2',
title: '系統帳號',
text_prop: 'u_id',
value_prop: 'num',
keys: [
{ id: 'u_id', title: '帳號', value: '' },
{ id: 'power', title: '群組', value: '' },
{ id: 'u_name', title: '姓名', value: '' },
],
api_url: HTTP_HOST + 'api/adminUser/GetList',
columns: [
{ id: 'u_id', title: '帳號', value: '' },
{ id: 'power', title: '群組', value: '' },
{ id: 'u_name', title: '姓名', value: '' },
],
selected: {},
select(t) {
console.log("select search2", t);
}
},
search3: {
id: 'search3',
title: '組別',
text_prop: 'kind',
value_prop: 'num',
keys: [
{ id: 'kind', title: '組別名稱', value: '' },
],
api_url: HTTP_HOST + 'api/member/GetGroupList',
columns: [
{ id: 'kind', title: '組別名稱', value: '' },
],
selected: {},
select(t) {
console.log("select search3", t);
}
},
search4: {
id: 'search4',
title: '職稱',
text_prop: 'kind',
value_prop: 'num',
keys: [
{ id: 'kind', title: '職稱', value: '' },
],
api_url: HTTP_HOST + 'api/member/GetTitleList',
columns: [
{ id: 'kind', title: '職稱', value: '' },
],
selected: {},
select(t) {
console.log("select search4", t);
}
},
},
show: false,
current: {},
list: [],
count: 0,
page:1,
loading: false,
footer: {
showFirstLastPage: true,
disableItemsPerPage: true,
itemsPerPageAllText: '',
itemsPerPageText:'',
},
},
snackbar: {
show: false,
text: "",
}
}
},
mounted() {
this.search_dialog.current = this.search_dialog.controls.search1
//console.log("mounted");
},
watch: {
options: {
handler() {
//console.log("watch1", this.search_dialog, this.search_dialog.page);
this.search_get()
console.log("watch2", this.search_dialog, this.search_dialog.page);
},
deep: true,
},
},
methods: {
search_show(curr) {
//console.log("btn_click:", curr, curr.api_url);
this.search_dialog.current = curr;
this.search_clear()
//this.search_get()//清除完自動會重抓, 故取消
this.search_dialog.show = true;
},
search_clear() {
if (!this.search_dialog.current.keys) return;
this.search_dialog.current.keys.forEach((t, i) => { t.value = '' })
this.search_get()
},
search_get() {
if (!this.search_dialog.current.keys) return;
let api_url = this.search_dialog.current.api_url;
let keys = this.search_dialog.current.keys;
//const { page, itemsPerPage } = this.options
//const { sortBy, sortDesc, page, itemsPerPage } = this.options
this.search_dialog.page = this.options.page??1
let params = { page: this.search_dialog.page, pageSize: 10 };//url params
var search = {};//post body
keys.forEach((t, i) => {
search[t.id] = t.value;
});
//necessary parameter===
if (this.search_dialog.current.id == 'search2') {
search['num'] = this.admin_id;
search['removeExist'] = true;
}
if (this.search_dialog.current.id == 'search4') {
search['inTime'] = (this.hr_id != '' ? false : true);
}
console.log("search_get", api_url, search, params, this.options);
this.search_dialog.loading = true
axios.post(api_url, search, { params: params })
.then(response => {
this.search_dialog.list = response.data.list
this.search_dialog.count = response.data.count
this.search_dialog.loading = false
})
.catch(error => {
console.log(error)
this.search_dialog.list = []
this.search_dialog.count = 0
this.search_dialog.loading = false
this.snackbar.text = "錯誤:" + error
this.snackbar.show=true
})
},
search_headers() {
if (!this.search_dialog.current.columns) return;
r = [];
this.search_dialog.current.columns.forEach((t, i) => {
r.push({
text: t.title,
align: 'start',
sortable: false,
value: t.id,
})
})
return r
},
search_select(row) {
let curr = this.search_dialog.current;
let target = $(`[data-search-control=${curr.id}]`);
curr.selected = row;
target.children("input.search-text").val(curr.selected[curr.text_prop])//text
target.children("input:hidden").val(curr.selected[curr.value_prop])//value
if (curr.select instanceof Function) {
curr.select(row);
}
this.search_dialog.show = false;
console.log(row, row["u_name"], row["f_number"], curr.id, target);
},
},
computed: {
},
})
</script>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="page_nav" runat="Server">
<div class="scroll-nav nav nav-tabs mb-2 mb-sm-0 d-none d-sm-flex">
</div>
<div class="">
<asp:Button ID="add" runat="server" Text="送出" OnClick="add_Click" CssClass="btn btn-primary" />
<asp:Button ID="edit" runat="server" Text="修改" Visible="false" OnClick="edit_Click" CssClass="btn btn-primary" />
<asp:Button ID="goback" runat="server" Text="回列表" Visible="false" CausesValidation="false" OnClick="goback_Click" CssClass="btn btn-outline-secondary" />
</div>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<uc1:alert runat="server" ID="L_msg" Text="" />
<div id="content" class="container-xl">
<div class="card shadow-sm my-2" id="sec2">
<div class="card-header py-0">
<nav class="navbar py-0">
<div class="nav nav-tabs">
<button class="nav-link active" id="sec2-tab1" data-bs-toggle="tab" data-bs-target="#sec2-page1"
type="button" role="tab" aria-controls="home" aria-selected="true">
基本資料</button>
<button class="nav-link" id="sec2-tab2" data-bs-toggle="tab" data-bs-target="#sec2-page2"
type="button" role="tab" aria-controls="profile" aria-selected="false">
職務管理</button>
<button class="nav-link" id="sec2-tab3" data-bs-toggle="tab" data-bs-target="#sec2-page3"
type="button" role="tab" aria-controls="profile" aria-selected="false">
聯絡方式</button>
<button class="nav-link" id="sec2-tab4" data-bs-toggle="tab" data-bs-target="#sec2-page4"
type="button" role="tab" aria-controls="profile" aria-selected="false">
圖片管理</button>
</div>
</nav>
</div>
<div class="card-body">
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="sec2-page1" role="tabpanel" aria-labelledby="sec2-tab1">
<div>
<div class="form-text text-muted">以下 * 欄位為必填欄位</div>
</div>
<div class="label-sm-right">
<div class="row mb-1 ">
<label class="col-sm-2 col-lg-1 col-form-label">信眾編號</label>
<div class="col-sm-4 col-lg-3">
<div class="input-group mb-3" data-search-control="search1" @click="search_show(search_dialog.controls.search1)">
<input class="form-control search-text" type="text" readonly
id="f_num_txt" runat="server" placeholder="信眾" value="" >
<asp:HiddenField ID="f_num" runat="server" Value="" />
<button class="btn btn-outline-secondary" type="button" >
<i class="mdi mdi-view-list-outline"></i>
</button>
</div>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">人員編號 *</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="m_number" MaxLength="20" runat="server" CssClass="form-control" onchange="checkNumber(this)" placeholder="請輸入人員編號"></asp:TextBox>
<span id="errormsg" class="text-danger" style="display:none;"></span>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" ControlToValidate="m_number" runat="server"
ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">人員姓名 *</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="u_name" MaxLength="20" runat="server" CssClass="form-control" placeholder="請輸入人員姓名"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator7" ControlToValidate="u_name" runat="server"
ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
</div>
</div>
<div class="row mb-1 ">
<label class="col-sm-2 col-lg-1 col-form-label">性別</label>
<div class="col-sm-4 col-lg-3">
<asp:DropDownList ID="sex" CssClass="form-select" runat="server">
<asp:ListItem Value="" Text="請選擇"></asp:ListItem>
<asp:ListItem Value="男" Text="男"></asp:ListItem>
<asp:ListItem Value="女" Text="女"></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="sex" Visible="false" runat="server" ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">身分證字號</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="id_code" MaxLength="10" runat="server" CssClass="form-control" data-encrypt="Y" placeholder="請輸入身分證字號"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator8" ControlToValidate="id_code" Visible="false" runat="server" ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">生日</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="birthday" runat="server" CssClass="form-control " TextMode="Date" autocomplete="off" data-date-format="yyyy-mm-dd"></asp:TextBox>
</div>
</div>
<div class="row mb-1 ">
<label class="col-sm-2 col-lg-1 col-form-label">血型</label>
<div class="col-sm-4 col-lg-3">
<asp:DropDownList ID="blood" CssClass="form-select" runat="server">
<asp:ListItem Value="" Text="請選擇"></asp:ListItem>
<asp:ListItem Value="A" Text="A型"></asp:ListItem>
<asp:ListItem Value="B" Text="B型"></asp:ListItem>
<asp:ListItem Value="AB" Text="AB型"></asp:ListItem>
<asp:ListItem Value="O" Text="O型"></asp:ListItem>
</asp:DropDownList>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">最高學歷</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="educational" MaxLength="100" runat="server" CssClass="form-control" placeholder="請輸入最高學歷"></asp:TextBox>
</div>
</div>
<div class="row mb-1 ">
<label class="col-sm-2 col-lg-1 col-form-label">皈依日期</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="refugedate" runat="server" CssClass="form-control " TextMode="Date" autocomplete="off" data-date-format="yyyy-mm-dd"></asp:TextBox>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">皈依法名</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="refuge_name" MaxLength="20" runat="server" CssClass="form-control" placeholder="請輸入皈依法名"></asp:TextBox>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">皈依道場</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="refuge_area" MaxLength="50" runat="server" CssClass="form-control" placeholder="請輸入皈依道場"></asp:TextBox>
</div>
</div>
</div>
<hr />
<div class="row mb-1">
<label class="col-form-label">備註</label>
<div class="">
<asp:TextBox ID="demo" runat="server" Rows="5" TextMode="MultiLine" CssClass="form-control" placeholder="請輸入備註"></asp:TextBox>
</div>
</div>
</div>
<div class="tab-pane fade label-sm-right" id="sec2-page2" role="tabpanel" aria-labelledby="sec2-tab2">
<div>
<div class="form-text text-muted">以下 * 欄位為必填欄位</div>
</div>
<div class="row mb-1 ">
<label class="col-sm-2 col-lg-1 col-form-label">系統帳號</label>
<div class="col-sm-4 col-lg-3">
<%--<asp:DropDownList ID="admin_num" CssClass="form-select" runat="server" data-int="Y">
<asp:ListItem Value="" Text="請選擇"></asp:ListItem>
</asp:DropDownList>--%>
<div class="input-group mb-3" data-search-control="search2" @click="search_show(search_dialog.controls.search2)">
<input class="form-control search-text" type="text" readonly
id="admin_num_txt" runat="server" placeholder="系統帳號" value="" >
<asp:HiddenField ID="admin_num" runat="server" Value="" />
<button class="btn btn-outline-secondary" type="button" >
<i class="mdi mdi-view-list-outline"></i>
</button>
</div>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">到職日期</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="takedate" runat="server" CssClass="form-control " TextMode="Date" autocomplete="off" data-date-format="yyyy-mm-dd"></asp:TextBox>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">離職日期</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="leavedate" runat="server" CssClass="form-control " TextMode="Date" autocomplete="off" data-date-format="yyyy-mm-dd"></asp:TextBox>
</div>
</div>
<div class="row mb-1 ">
<label class="col-sm-2 col-lg-1 col-form-label">薪資</label>
<div class="col-sm-4 col-lg-3">
<asp:TextBox ID="salary" MaxLength="10" runat="server" CssClass="form-control" TextMode="Number" placeholder="請輸入薪資"></asp:TextBox>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">組別</label>
<div class="col-sm-4 col-lg-3">
<div class="input-group mb-3" data-search-control="search3" @click="search_show(search_dialog.controls.search3)">
<input class="form-control search-text" type="text" readonly
id="group_kind_txt" runat="server" placeholder="組別" value="" >
<asp:HiddenField ID="group_kind" runat="server" Value="" />
<button class="btn btn-outline-secondary" type="button" >
<i class="mdi mdi-view-list-outline"></i>
</button>
</div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="group_kind_txt" Visible="false" runat="server" ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
</div>
<label class="col-sm-2 col-lg-1 col-form-label">職稱</label>
<div class="col-sm-4 col-lg-3">
<div class="input-group mb-3" data-search-control="search4" @click="search_show(search_dialog.controls.search4)">
<input class="form-control search-text" type="text" readonly
id="title_kind_txt" runat="server" placeholder="職稱" value="" >
<asp:HiddenField ID="title_kind" runat="server" Value="" />
<button class="btn btn-outline-secondary" type="button" >
<i class="mdi mdi-view-list-outline"></i>
</button>
</div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator10" ControlToValidate="title_kind_txt" Visible="false" runat="server" ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
</div>
</div>
</div>
<div class="tab-pane fade label-sm-right" id="sec2-page3" role="tabpanel" aria-labelledby="sec2-tab3">
<div class="row mb-1">
<label class="col-sm-2 col-form-label">聯絡電話</label>
<div class="col-sm-10">
<asp:TextBox ID="phone" MaxLength="15" runat="server" CssClass="form-control" data-encrypt="Y" placeholder="請輸入聯絡電話,如: 04-2237-0000"></asp:TextBox>
<asp:RegularExpressionValidator ControlToValidate="phone" ErrorMessage="格式有誤" ID="RegularExpressionValidator3" runat="server" ValidationExpression="^[+-]?\d+([+-]?\d*)*$" Display="Dynamic" SetFocusOnError="true" />
</div>
</div>
<div class="row mb-1">
<label class="col-sm-2 col-form-label">公司電子信箱</label>
<div class="col-sm-10">
<asp:TextBox ID="com_email" MaxLength="200" runat="server" CssClass="form-control" placeholder="請輸入公司電子信箱"></asp:TextBox>
<asp:RegularExpressionValidator ControlToValidate="com_email" Display="Dynamic" SetFocusOnError="true" ErrorMessage="格式有誤!" ID="RegularExpressionValidator2" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
</div>
</div>
<div class="row mb-1">
<label class="col-sm-2 col-form-label">個人電子信箱</label>
<div class="col-sm-10">
<asp:TextBox ID="email" MaxLength="200" runat="server" CssClass="form-control" placeholder="請輸入個人電子信箱"></asp:TextBox>
<asp:RegularExpressionValidator ControlToValidate="email" Display="Dynamic" SetFocusOnError="true" ErrorMessage="格式有誤!" ID="RegularExpressionValidator1" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
</div>
</div>
<div class="row mb-1">
<label class="col-sm-2 col-form-label">其他聯絡方式</label>
<div class="col-sm-10">
<asp:TextBox ID="contact" MaxLength="100" runat="server" CssClass="form-control" placeholder="請輸入其他聯絡方式"></asp:TextBox>
</div>
</div>
<div class="row mb-1">
<label class="col-sm-2 col-form-label">戶籍地址</label>
<div class="col-sm-10">
<asp:TextBox ID="address1" MaxLength="200" runat="server" CssClass="form-control" placeholder="請輸入戶籍地址"></asp:TextBox>
</div>
</div>
<div class="row mb-1">
<label class="col-sm-2 col-form-label">居住地址</label>
<div class="col-sm-10">
<asp:TextBox ID="address2" MaxLength="200" runat="server" CssClass="form-control" placeholder="請輸入居住地址"></asp:TextBox>
</div>
</div>
</div>
<div class="tab-pane fade" id="sec2-page4" role="tabpanel" aria-labelledby="sec2-tab4">
<asp:Panel ID="Panel1" runat="server" CssClass="row mb-1">
<div class="border rounded col-md-4">
<p class="form-control-static" style="height: 35px">建議尺寸300*300象素 &nbsp;<asp:CheckBox ID="CheckBox1" Text="刪除" runat="server" Visible="false" /></p>
<table border="0">
<tr>
<td><asp:FileUpload ID="FileUpload1" runat="server" /></td>
</tr>
<tr>
<td width="160" height="160">
<asp:Image ID="Image1" runat="server" Visible="false" ImageUrl="~/admin/images/showpic.gif" /></td>
</tr>
</table>
</div>
</asp:Panel>
</div>
</div>
</div>
</div>
<v-dialog v-model="search_dialog.show" max-width="500px">
<v-card>
<v-card-title class="justify-space-between grey lighten-2">
查詢:{{search_dialog.current.title}}
<v-btn icon @click="search_dialog.show=false"><v-icon>mdi-close</v-icon></v-btn>
</v-card-title>
<v-card-text >
<v-row>
<v-col v-for="item in search_dialog.current.keys"
:cols="search_dialog.current.keys.length>1?6:12" >
<v-text-field v-model="item.value" :label="item.title"></v-text-field>
</v-col>
<v-col cols="12" class="text-end">
<v-btn color="primary" elevation="0" @click="search_get()">查詢</v-btn>
<v-btn elevation="0" @click="search_clear()">清除條件</v-btn>
</v-col>
</v-row>
<v-data-table
:headers="search_headers()"
:items="search_dialog.list"
:footer-props="search_dialog.footer"
:items-per-page="10"
:server-items-length="search_dialog.count"
:page.sync="search_dialog.page"
:options.sync="options"
@click:row="search_select"
></v-data-table>
</v-card-text>
<v-card-actions>
</v-card-actions>
</v-card>
</v-dialog>
<v-snackbar
v-model="snackbar.show"
timeout="2000"
>
{{ snackbar.text }}
<template v-slot:action="{ attrs }">
<v-btn
text
v-bind="attrs"
@click="snackbar.show = false"
>
關閉
</v-btn>
</template>
</v-snackbar>
</div>
</asp:Content>