| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- const app = getApp();
- Page({
- data: {
- formData: {
- name: '',
- simplified_name: '',
- sex: '1',
- birthday: '',
- family_rank: '',
- name_word_generation: '',
- is_pass_away: 0,
- marital_status: 0,
- relation_type: '',
- sub_relation_type: '',
- former_name: '',
- phone: '',
- notes: ''
- },
- selectedMemberName: '',
- selectedMemberId: '',
- showDuplicateModal: false,
- duplicateMembers: [],
- showMemberDetailModal: false,
- selectedMemberDetail: null,
- isPassAwayOptions: ['健在', '已故', '未知'],
- maritalStatusOptions: ['未知', '未婚', '已婚', '离异/丧偶'],
- relationTypeOptions: ['父子 (关联人为父)', '母子 (关联人为母)', '夫妻', '兄弟', '姐妹'],
- subRelationTypeOptions: ['亲生/正妻', '养父', '出继(亲生父母)', '入继(养父母)', '妾', '外室'],
- showMemberSearch: false,
- memberSearchKeyword: '',
- memberSearchResults: [],
- memberSearchLoading: false
- },
- onLoad: function () {
- // 不自动登录,在需要时登录
- },
- // 输入处理
- onNameInput: function (e) {
- this.setData({
- 'formData.name': e.detail.value
- });
- // 输入姓名后自动检查同名
- if (e.detail.value.length >= 2) {
- this.checkDuplicate(e.detail.value);
- }
- },
- onSimplifiedNameInput: function (e) {
- this.setData({
- 'formData.simplified_name': e.detail.value
- });
- },
- selectSex: function (e) {
- this.setData({
- 'formData.sex': e.currentTarget.dataset.value
- });
- },
- onBirthdayChange: function (e) {
- this.setData({
- 'formData.birthday': e.detail.value
- });
- },
- onFamilyRankInput: function (e) {
- this.setData({
- 'formData.family_rank': e.detail.value
- });
- },
- onGenerationInput: function (e) {
- this.setData({
- 'formData.name_word_generation': e.detail.value
- });
- },
- onIsPassAwayChange: function (e) {
- this.setData({
- 'formData.is_pass_away': parseInt(e.detail.value)
- });
- },
- onMaritalStatusChange: function (e) {
- this.setData({
- 'formData.marital_status': parseInt(e.detail.value)
- });
- },
- onRelationTypeChange: function (e) {
- this.setData({
- 'formData.relation_type': e.detail.value
- });
- },
- onSubRelationTypeChange: function (e) {
- this.setData({
- 'formData.sub_relation_type': e.detail.value
- });
- },
- onFormerNameInput: function (e) {
- this.setData({
- 'formData.former_name': e.detail.value
- });
- },
- onPhoneInput: function (e) {
- this.setData({
- 'formData.phone': e.detail.value
- });
- },
- onNotesInput: function (e) {
- this.setData({
- 'formData.notes': e.detail.value
- });
- },
- // 检查同名成员
- checkDuplicate: function (name) {
- wx.request({
- url: `${app.globalData.baseUrl}/api/members/check_duplicate`,
- method: 'GET',
- data: {
- name: name
- },
- success: (res) => {
- if (res.data.success && res.data.data.length > 0) {
- this.setData({
- duplicateMembers: res.data.data,
- showDuplicateModal: true
- });
- }
- },
- fail: () => {
- console.log('检查同名失败');
- }
- });
- },
- // 打开关联成员搜索弹层
- selectRelatedMember: function () {
- this.setData({
- showMemberSearch: true,
- memberSearchKeyword: '',
- memberSearchResults: []
- });
- },
- closeMemberSearch: function () {
- this.setData({ showMemberSearch: false });
- },
- onMemberSearchInput: function (e) {
- this.setData({ memberSearchKeyword: e.detail.value });
- },
- doMemberSearch: function () {
- const keyword = this.data.memberSearchKeyword.trim();
- if (!keyword) {
- wx.showToast({ title: '请输入姓名搜索', icon: 'none' });
- return;
- }
- this.setData({ memberSearchLoading: true, memberSearchResults: [] });
- wx.request({
- url: `${app.globalData.baseUrl}/api/members/search`,
- method: 'GET',
- header: { 'Authorization': `Bearer ${app.globalData.token}` },
- data: { keyword },
- success: (res) => {
- this.setData({ memberSearchLoading: false });
- if (res.data && res.data.success) {
- const results = res.data.data || [];
- if (results.length === 0) {
- wx.showToast({ title: '未找到匹配成员', icon: 'none' });
- }
- this.setData({ memberSearchResults: results });
- } else {
- wx.showToast({ title: '搜索失败', icon: 'none' });
- }
- },
- fail: () => {
- this.setData({ memberSearchLoading: false });
- wx.showToast({ title: '网络请求失败', icon: 'none' });
- }
- });
- },
- confirmSelectMember: function (e) {
- const member = e.currentTarget.dataset.member;
- this.setData({
- selectedMemberId: member.id,
- selectedMemberName: member.name + (member.simplified_name ? `(${member.simplified_name})` : ''),
- showMemberSearch: false
- });
- },
- clearSelectedMember: function () {
- this.setData({ selectedMemberId: '', selectedMemberName: '' });
- },
- // 关闭同名弹窗
- closeDuplicateModal: function () {
- this.setData({
- showDuplicateModal: false
- });
- },
- // 查看成员详情(可从搜索结果或同名列表进入)
- viewMemberDetail: function (e) {
- const member = e.currentTarget.dataset.member;
- wx.request({
- url: `${app.globalData.baseUrl}/api/members/${member.id}`,
- method: 'GET',
- header: { 'Authorization': `Bearer ${app.globalData.token}` },
- success: (res) => {
- if (res.data && res.data.success) {
- this.setData({
- selectedMemberDetail: res.data.data,
- // 记录是否从搜索弹层打开,用于"选择此人"回填
- _detailFromSearch: this.data.showMemberSearch,
- showMemberDetailModal: true,
- showDuplicateModal: false
- });
- } else {
- wx.showToast({ title: '获取详情失败', icon: 'none' });
- }
- },
- fail: () => {
- wx.showToast({ title: '网络请求失败', icon: 'none' });
- }
- });
- },
- // 在详情弹层中直接选择此人作为关联成员
- selectFromDetail: function () {
- const m = this.data.selectedMemberDetail;
- if (!m) return;
- this.setData({
- selectedMemberId: m.id,
- selectedMemberName: m.name + (m.simplified_name ? `(${m.simplified_name})` : ''),
- showMemberDetailModal: false,
- showMemberSearch: false
- });
- },
- // 关闭成员详情弹窗
- closeMemberDetailModal: function () {
- this.setData({
- showMemberDetailModal: false,
- selectedMemberDetail: null
- });
- },
- // 放弃录入
- abortEntry: function () {
- wx.navigateBack();
- },
- // 阻止事件冒泡
- stopPropagation: function () {},
- // 提交表单
- submitForm: function () {
- const { formData } = this.data;
-
- // 验证必填字段
- if (!formData.name.trim()) {
- wx.showToast({
- title: '请输入姓名(繁体)',
- icon: 'none'
- });
- return;
- }
-
- if (!formData.birthday) {
- wx.showToast({
- title: '请选择出生日期',
- icon: 'none'
- });
- return;
- }
- wx.showLoading({
- title: '提交中...'
- });
- wx.request({
- url: `${app.globalData.baseUrl}/api/members/add`,
- method: 'POST',
- header: {
- 'Content-Type': 'application/json',
- 'Authorization': `Bearer ${app.globalData.token}`
- },
- data: {
- name: formData.name,
- simplified_name: formData.simplified_name,
- sex: parseInt(formData.sex),
- birthday: formData.birthday,
- family_rank: formData.family_rank,
- name_word_generation: formData.name_word_generation,
- is_pass_away: formData.is_pass_away,
- marital_status: formData.marital_status,
- former_name: formData.former_name,
- phone: formData.phone,
- notes: formData.notes,
- relations: this.data.selectedMemberId ? [{
- parent_mid: this.data.selectedMemberId,
- relation_type: parseInt(formData.relation_type) || 1,
- sub_relation_type: parseInt(formData.sub_relation_type) || 0
- }] : []
- },
- success: (res) => {
- wx.hideLoading();
- if (res.data.success) {
- wx.showToast({
- title: '录入成功',
- icon: 'success'
- });
- setTimeout(() => {
- wx.navigateBack();
- }, 1500);
- } else {
- wx.showToast({
- title: res.data.message || '录入失败',
- icon: 'none'
- });
- }
- },
- fail: () => {
- wx.hideLoading();
- wx.showToast({
- title: '网络异常',
- icon: 'none'
- });
- }
- });
- }
- });
|